web2py不使用grid,完全自定义导出excel文件的方法

       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()加工导出各种各样的文件;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值