[reportlab-users] Formatting decimals inside Table
Andy Robinson
andy at reportlab.com
Fri Sep 7 03:52:44 EDT 2012
Our tables don't really know or care about their cell contents, so the
contents of each table cell should be the string you want to display.
This is a deliberate design decision - it's easier to let you
prepare the data, because otherwise we would need an infinite variety
of formatting utilities - numeric formats, currency symbols, and all
the special cases where someone doesn't want a number in that
particular cell etc etc. If you are always going to show, say, two
digits after the comma, then formatting it yourself and right-aligning
will work, because fonts almost always have a constant width for all
the digits to help numbers line up neatly.
There is also a decimal alignment property for the table styles, which
helps the English-language folks. tests/test_platypus_tables.py
shows the use of this (example pasted below). However, it hunts
within the string for a '.' character and aligns the string from that,
so it won't do the same for a comma. I can take a look at whether we
could make the 'pivot character' configurable in the table style if
you wish.
t = Table([[u'Corporate Assets','Amount'],
['Fixed Assets','1,234,567.89'],
['Company Vehicle','1,234.8901'],
['Petty Cash','42'],
[u'Intellectual Property\u00ae','(42,078,231.56)'],
['Overdraft','(12,345)'],
['Boardroom Flat Screen','60 inches'],
['Net Position','Deep Sh*t.Really']
],
[144,72])
ts = TableStyle(
[#first the top row
('ALIGN', (1,1), (-1,-1), 'CENTER'),
('LINEABOVE', (0,0), (-1,0), 1, colors.purple),
('LINEBELOW', (0,0), (-1,0), 1, colors.purple),
('FONT', (0,0), (-1,0), 'Times-Bold'),
#bottom row has a line above, and two lines below
('LINEABOVE', (0,-1), (-1,-1), 1, colors.purple), #last 2
are count, sep
('LINEBELOW', (0,-1), (-1,-1), 0.5, colors.purple, 1, None, None, 4,1),
('LINEBELOW', (0,-1), (-1,-1), 1, colors.red),
('FONT', (0,-1), (-1,-1), 'Times-Bold'),
#numbers column
('ALIGN', (1,1), (-1,-1), 'DECIMAL'),
('RIGHTPADDING', (1,1), (-1,-1), 36),
('TEXTCOLOR', (1,4), (1,4), colors.red),
On 7 September 2012 07:40, Pasi Oja-Nisula <pon at iki.fi> wrote:
> Hi,
>
> I'm doing generic reports (recordsets from database) with Reportlab. By
> looking at the data I can do left/right alignment based on datatype. I
> just modify the tablestyle accordingly. But now I need to fix
> decimal.Decimal fields. They look fine except the decimal point. I really
> need an option to change this to comma instead of point. So if the data is
> "1234.500" it needs to read "1234,500". Actually it would be nice to have
> other formatting also, but for now this is the major stumbling point.
>
> I googled and searched the archives and closest I found was
> lib.formatters.DecimalFormatter, but it seems to be usable for charting
> only. So far I have no ideas but to loop through the data and convert
> Decimals to strings with something like str(d).replace('.', ',')
>
> Am I missing something obvious or is this really the only option?
>
> Thanks,
>
> Pasi
> _______________________________________________
> reportlab-users mailing list
> reportlab-users at lists2.reportlab.com
> http://two.pairlist.net/mailman/listinfo/reportlab-users
--
Andy Robinson
Managing Director
ReportLab Europe Ltd.
Thornton House, Thornton Road, Wimbledon, London SW19 4NG, UK
Tel +44-20-8405-6420
More information about the reportlab-users
mailing list