我尝试使用TableFactory
创建一个表格,但几乎没有文档,我只能找到two examples。 PDFTable
函数确实输出PDF但它似乎没有找到数据!
我的代码:
#Import module components
from TableFactory import *
# Build the data setup required
ids = ['a','b','c','d','e','f','g','h','i']
lon = [-80.15765381, -80.40131378, -80.56086731, -80.52893066,
-80.24595642, -80.7718277, -80.877388, -79.9454422, -79.84288025]
lat = [ 0.34739658, -0.39966396, -0.91119879, 0.83061123, 0.67057306,
-0.1843673, -0.18189907, 0.43762371, 0.45526683]
depth = [ 14044, 4942, 7000, 13107,
6281, 7000, 1172, 4825, 6730]
rows4 = TableRow()
setattr(rows4, 'ids', ids)
setattr(rows4, 'lon', lon)
setattr(rows4, 'lat', lat)
setattr(rows4, 'depth', depth)
invoicerow = RowSpec(ColumnSpec('ids', 'Event ID'),
ColumnSpec('lon', 'Longitude'),
ColumnSpec('lat', 'Latitude'),
ColumnSpec('depth', 'Depth'))
lines = invoicerow.makeall(rows4)
#create the tables
#HTML
HTMLTable('Invoices by Customer',
'Amount of each invoice, sorted by invoiceid',
headers=invoicerow).render(lines)
# Excel
SpreadsheetTable('Invoices by Customer',
'Amount of each invoice, sorted by invoiceid',
headers=invoicerow).render(lines)
# PDF
pdfmaker = PDFTable('My title',
headers=invoicerow)
open('invoicetable.pdf', 'wb').write(pdfmaker.render(lines))
但它并没有产生我的预期:
答案 0 :(得分:1)
你很亲密!这是我稍微改写它的方式:
<input>
基本上,TableFactory需要一个行对象列表,而不是列表列表。我将列列表(#Import module components
from collections import namedtuple
from TableFactory import *
# Build the data setup required
ids = ['a','b','c','d','e','f','g','h','i']
lon = [-80.15765381, -80.40131378, -80.56086731, -80.52893066,
-80.24595642, -80.7718277 , -80.877388 , -79.9454422 , -79.84288025]
lat = [ 0.34739658, -0.39966396, -0.91119879, 0.83061123, 0.67057306,
-0.1843673 , -0.18189907, 0.43762371, 0.45526683]
depth = [ 14044.31152 , 4942.527294, 7000. , 13107.94449 ,
6281.775475, 7000. , 1172.017574, 4825.51527 ,
6730.996132]
# Make an object that can represent a row in the table. This could be
# a full-blown class, or a dict like {'id': 'a', 'lon': 0.3, ...}, etc.
DataRow = namedtuple('DataRow', ['id', 'lon', 'lat', 'depth'])
# Combine the separate lists together into a list of DataRow objects
rows = [DataRow(*_) for _ in zip(ids, lon, lat, depth)]
invoicerow = RowSpec(ColumnSpec('id', 'Event ID'),
ColumnSpec('lon', 'Longitude'),
ColumnSpec('lat', 'Latitude'),
ColumnSpec('depth', 'Depth'))
lines = invoicerow.makeall(rows)
#create the tables
#HTML
html = HTMLTable('Invoices by Customer',
'Amount of each invoice, sorted by invoiceid',
headers=invoicerow).render(lines)
# Excel
excel = SpreadsheetTable('Invoices by Customer',
'Amount of each invoice, sorted by invoiceid',
headers=invoicerow).render(lines)
# PDF
pdf = PDFTable('Invoices by Customer',
'Amount of each invoice, sorted by invoiceid',
headers=invoicerow).render(lines)
with open('my.pdf', 'wb') as outfile:
outfile.write(pdf)
,ids
,lon
,lat
)转换为TableFactory可以咀嚼的DataRow对象列表。