flask中使用xlsxwriter导出excel文件

时间:2023-03-09 13:23:49
flask中使用xlsxwriter导出excel文件
最近需要使用flask导出xlsxwriter生成的excel文件,在文件比较小的情况下,可以直接导出。

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

 import xlsxwriter
import StringIO

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

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