web2py使用excel的xlsx格式导出

上一篇文章“web2py grid 的csv导出优化excel中文乱码和表头label”已经充分优化了web2py的csv文件的中文导出功能,有些场景还需要导出xlsx格式的,那我们继续,优化web2py自带gluon文件下的sqlhtml.py文件:

1、pip安装openpyxl库

pip install openpyxl

2、在sqlhtml.py文件最后增加代码,就是新增xlsx的导出类

class ExporterXLSX(ExportClass):
    label = 'XLSX'
    file_ext = "xlsx"
    content_type = ".xlsx"
    def __init__(self, rows):
        ExportClass.__init__(self, rows)

    def export(self):
        import openpyxl
        if len(self.rows) == 0:
            return 'empty rows-table'
        rows_colnames= [name.replace('"', '') for name in self.rows.colnames ]
        book = openpyxl.Workbook()
        sheet = book.active
        (sheet.title, _)= rows_colnames[0].split('.')
        #写lable表头
        tables=[];fields=[];labels=[];
        for col in rows_colnames:
            (t,f) = col.split('.')
            tables.append(t)
            fields.append(f)
            labels.append(str(self.rows.db[t][f].label))
        sheet.append(labels)

        # list转为set,再转为list能实现list去重,
        # 字段来自多个表则为联查拼的表
        if len((list(set(tables)))) > 1:
           field_len=len(fields)
           for row in self.rows:
              write_line = [row[tables[f]][fields[f]] for f in range(0,field_len)]
              sheet.append(write_line)
        else:
           for row in self.rows:
              write_line=[ row[f] for f in fields]
              sheet.append(write_line)

        s = StringIO()
        book.save(s)
        return s.getvalue()

3、找到 exportManager = dict(....)这里增加我们的导出类型:

exportManager = dict(
    xlsx=(ExporterXLSX, 'XLSX文件导出', T('XLSX文件导出')), 
    ........
    )

4、OK了,打开你的grid组件:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值