最近需要使用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)