【问题标题】:Flask response to excel file giving me corrupt excel response对excel文件的烧瓶响应给了我损坏的excel响应
【发布时间】:2020-12-19 01:54:36
【问题描述】:

我创建了端点来从数据库中获取数据并使用 xmlswriter 库将数据下载到 excel 文件中。但不是下载 excel 文件,而是下载名称为“unknown.txt”的文本文件,其中包含以下数据::

"xl/workbook.xml。Q�N�0����4���T�%*!�P�#2����������Y�J)��ɞ�� ��x�

我已经尝试了下面注释代码中提到的所有示例代码: 代码:

@app.route("/api/v1/downloadexcel", methods=["GET"])
def excel_download2():   
    date_from = request.args.get("date_from")
    date_to = request.args.get("date_to")

    try:
        data_to_create_excel= get_data(date_from, date_to)
      
        output = io.BytesIO()
        workbook = xlsxwriter.Workbook(output, {'in_memory': True})

        # workbook = xlsxwriter.Workbook('demo.xlsx')

        worksheet = workbook.add_worksheet('data_to_create_excel')
        headers = list(data_to_create_excel[0].keys()) if len(data_to_create_excel) else []
        rows = [data .values() for data in data_to_create_excel]
        for row_num, row_data in enumerate([headers , *rows]):
            for col_num, col_data in enumerate(row_data):
                worksheet.write(row_num, col_num, col_data)


        workbook.close()
        output.seek(0)
        return send_file(output, attachment_filename="output.xlsx", as_attachment=True)

        # return Response(output.getvalue(), mimetype="application/ms-excel",
        #                 headers={"Content-Disposition": "attachment;filename=employee_report.xlsx"})

        # self.send_response(200)
        # self.send_header("Access-Control-Expose-Headers", "Content-Disposition")
        # self.send_header('Content-Disposition', 'attachment; filename=test.xlsx')
        # self.send_header('Content-type',
        #                  'application/ms-excel')
        # self.end_headers()
        # self.wfile.write(output.read())
        # return

        # file_name = 'ore_data_{}.xlsx'.format(
        #     datetime.now().strftime('%d/%m/%Y'))
        # return jsonify([csv_headers]), 200
        # return send_file(output,
        #                  attachment_filename='your_filename.xlsx',
        #                  as_attachment=True)
        # return Response(
        #     output.getvalue(),
        #     # mimetype='application/ms-excel',
        #     headers={
        #         "Access-Control-Expose-Headers": "Content-Disposition",
        #         "Content-Disposition": 'attachment; filename=test.xlsx',
        #         'Content-type':
        #     'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        #     },
        # )
        # return output.read(),200
    except Exception as e:
        print(e)

【问题讨论】:

  • 你解决了吗?我也面临同样的问题。
  • 有没有人找到办法做到这一点?或者这是不可能的?

标签: python-3.x excel flask bytesio


【解决方案1】:

将您的数据添加到 pandas 数据框中。更容易处理列等。然后使用to_excel 函数。然后使用 send_from_directory (就像你正在做的那样)发送文件。

【讨论】:

  • 我正在尝试动态生成 excel。我不想将文件保存在光盘上。我想存储在内存中并导出它。我仍然遇到同样的错误。
猜你喜欢
  • 1970-01-01
  • 2017-12-04
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
相关资源
最近更新 更多