flask中使用xlsxwriter导出excel文件

最近需要使用flask导出xlsxwriter生成的excel文件,在文件比较小的情况下,可以直接导出。

  首先,这里使用了StringIO,导出使用的模块

1 import xlsxwriter
2 import StringIO

设置好IO对象,把文件写到io流中,过程见注释

 1 @app.route('/down_excel')
 2 def down_excel():
 3     sio = StringIO.StringIO()
 4     workbook = xlsxwriter.Workbook(sio)  # 直接写到io中
 5     sheet = workbook.add_worksheet(u'sheet1')
 6     style = workbook.add_format()  # 设置风格
 7     sheet.merge_range(0, 0, 0, 5, 'aaa')  # 合并单元格
 8     sheet.write('A2', u'内容', style)
 9     for i in range(2, 10):
10         sheet.write(i, 2, 1)
11     sheet.write(11, 2, '=SUM(1:10)')  # 增加公式
12     sheet.set_column(0, 5, 10)  # 设置列宽
13     sheet.set_default_row(35)  # 设置默认行高
14     workbook.close()  # 需要关闭
15     sio.seek(0)  # 找到流的起始位置
16     resp = make_response(sio.getvalue())
17     resp.headers["Content-Disposition"] = "attachment; filename={}.xlsx".format('name')
18     resp.headers['Content-Type'] = 'application/x-xlsx'
19     return resp

如果觉得生成的excel中,格式不好看,可以设置一些默认格式,我在这里写了一个函数,可以直接在添加format时使用,如下

def xlsx_style(**kwargs):
    style = {
        'bold': kwargs.get('bold', False),  # 加粗
        'font_name': kwargs.get('font_name', 'SimSun'),  # 字体类型,默认宋体
        'font_size': kwargs.get('font_size', 12),  # 字体大小,默认12
        'font_color': kwargs.get('font_color', '#000000'),  # 字体颜色,黑色
        'align': kwargs.get('align', 'center'),  # 默认水平居中
        'valign': kwargs.get('valign', 'vcenter'),  # 默认垂直居中
        'text_wrap': kwargs.get('text_wrap', True),  # 默认自动换行
        'top': kwargs.get('top', 1),  # 上边界,线条宽度
        'bottom': kwargs.get('bottom', 1),  # 边界
        'left': kwargs.get('left', 1),  # 边界
        'right': kwargs.get('right', 1),  # 边界
        'bg_color': kwargs.get('bg_color', '#FFFFFF'),  # 背景颜色,白色
        # 其他类型设置格式可以接着写
    }

    return style

在这里使用

head_style = workbook.add_format(xlsx_style(bold=True, font_size=20))
body_style = workbook.add_format(xlsx_style(bg_color='#FFFF00'))
worksheet.write(2, 5, 'aaa', body_style)

 

posted @ 2017-09-26 18:54  潇湘旧友  阅读(2767)  评论(0编辑  收藏  举报