web2py的grid组件带着有丰富的数据导出功能,但是有时候不用这个组件,比如我们自定义了一个统计的汇总表格,要增加下载功能怎么办呢:
假如有个function叫reportview,用于展示一个表格,同时下载表格内容,表格是个二维表结构,
def reportview():
report_table=[['header1','header2','header3'],
['line1_1','line1_2','line1_3'],
['line2_1','line2_2','line2_3'],]
reportview = TABLE(*[TR(*rows) for rows in report_table],
_class='table table-hover table-bordered table-condensed',
_style='font-size:14px;')
form = SQLFORM.factory( formstyle='table3cols',submit_button='Submit',
buttons=[BUTTON('数据表格导出', _type="submit", _class='btn btn-default btn-secondary')])
if form.process().accepted:
if session.report_table:
import openpyxl
from gluon._compat import StringIO
book = openpyxl.Workbook()
sheet = book.active
for row in report_table:
sheet.append(row)
s = StringIO()
book.save(s)
# 保存excel文件内容到StringIO
s.seek(0)
# 修改http响应头
response.headers['Content-Type'] = 'application/vnd.ms-excel'
response.headers['Content-Disposition'] = 'attachment; filename='+pagetitle+'.xlsx'
# 返回数据
return s.getvalue()
else:
redirect(URL(reportview))
return locals()
配套的view文件很简单:
{{extend 'layout.html'}}
{{=reportview}}
{{=form}}
同理,我们可以StringIO()加工导出各种各样的文件;