创建excel
book = xlwt.Workbook(encoding='utf-8') # 获取excel对象
sheet = book.add_sheet('状态监视') # 设置excel的sheet名称
设置style格式
alignment = xlwt.Alignment()# 左右的对其,水平居中 May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER,# HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED,# HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTEDalignment.horz = xlwt.Alignment.HORZ_CENTER# 上下对齐 May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTEDalignment.vert = xlwt.Alignment.VERT_CENTERstyle = xlwt.XFStyle() # 创建一个样式对象style.alignment = alignment # 将格式Alignment对象加入到样式对象
写入excel
for col, field in enumerate(fields): # 写入excel表头sheet.write(0, col, field,style)
# 逐像元写入
for col, field in enumerate(temp):sheet.write(row, col, field,style)sheet.col(col).width = 200*30 # 设置列宽
合并像元
合并像元的同时填写内容,可用于多级表头或者合并处理数据等需求。
sheet.write_merge(0, 1,col,col, field,style) # 合并第col列的第一行和第二行,并填入某个值。sheet.write_merge(0, 0, 6, 9,fields[6],style) # 合并第1列的第6行和第9行,并填入某个值。
效果如图:
将数据存储为字节流传给前端
sio = BytesIO()
data.save(sio) # 将数据存储为bytes
sio.seek(0)
response = make_response(sio.getvalue())
response.headers['Content-type'] = 'application/vnd.ms-excel' # 响应头告诉浏览器发送的文件类型为excel
response.headers['Content-Disposition'] = 'attachment; filename=data.xls' # 浏览器打开/保存的对话框,data.xlsx-设定的文件名
response.headers['Access-Control-Allow-Origin'] = '*'
注意
xlwt模块只能写xls文件,不能写xlsx文件(写xlsx程序不会报错,但最后文件无法用excel直接打开,可以用wps打开,这类似excel版本升级改造的问题。)也可以用pandas,他既可以处理xls文件、也可处理xlsx文件。