flask xlwt生成Excel并下载

参考:https://blog.csdn.net/weixin_39531594/article/details/114408242

https://blog.csdn.net/weixin_41279955/article/details/101072872

主要代码如下:

from flask import request, Response
import xlwt


def set_style(name, height, horz=0x01, bold=False, background=False):
    # 初始化样式
    style = xlwt.XFStyle()
    # 为样式创建字体
    font = xlwt.Font()
    font.name = name
    font.bold = bold
    font.color_index = 4
    font.height = height
    style.font = font

    # 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)
    style.alignment.horz = horz
    # 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)
    style.alignment.vert = 0x01
    if background:
        style.pattern.pattern = xlwt.Pattern.SOLID_PATTERN
        style.pattern.pattern_fore_colour = xlwt.Style.colour_map['pale_blue']
    # 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
    style.borders.top = 1
    style.borders.right = 1
    style.borders.bottom = 1
    style.borders.left = 1

    return style


def export_excel(request_data):
    # 导出Excel
    result = get_data(request_data)
    data = result.get('items', None)
    f = xlwt.Workbook(encoding='gbk')
    sheet1 = f.add_sheet('信息', cell_overwrite_ok=True)
    row0 = ["A", "B", "C", "D", "E", "F", "G"]

    start_row = 0
    end_row = 1
    # 写标题
    header_style = set_style('宋体', 240, 0x02, True, True)
    for i in range(0, len(row0)):
        # sheet1.write(行,列,值,格式)
        # 合并行单元格sheet1.write_merge(行1,行2,列1,列2)从行1-行2,列1到列2)
        sheet1.write_merge(start_row, end_row, i, i, row0[i], header_style)
        sheet1.col(i).width = 4000
    sheet1.col(4).width = 9000

    row1 = ["H1", "H2", "H3", "H4"]
    row0_len = len(row0)
    sheet1.write_merge(start_row, start_row, row0_len, row0_len + len(row1) - 1,  "H", header_style)
    for i in range(0, len(row1)):
        # sheet1.write(行,列,值,格式)
        sheet1.write(1, i + row0_len, row1[i], header_style)
        sheet1.col(i + row0_len).width = 4000

    # 写数据列
    row_num = 2
    data_style = set_style('宋体', 220)
    fields = ["A", "B", "C", "D", "E", "F", "G", "H1",
              "H2", "H3", "H4"]
    if data:
        for item in data:
            for i in range(0, len(fields)):
                sheet1.write(row_num, i, item[fields[i]], data_style)
            row_num = row_num + 1

    # 文件流的形式保存到内存
    stream = io.BytesIO()
    try:
        f.save(stream)
        stream.seek(0)
        return stream.getvalue()
    finally:
        stream.close()
	
	
@app.route('/export_excel', methods=['POST'])
def api_export_excel():
    """
    :return:
    """
    try:
        request_data = request.json
        stream = export_excel(request_data)
        response = Response(stream, content_type='application/octet-stream')
        # # xlwt不支持xlsx,只支持xls
        response.headers['Content-disposition'] = 'attachment; filename=export_excel.xls'
        return response
    except Exception as e:
        return ApiResult.result_error(e)	

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值