问题描述
我创建了端点以使用 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)
解决方法
将您的数据添加到 Pandas 数据框中。处理列等要容易得多。然后使用 to_excel 函数。然后使用 send_from_directory(正如您所做的那样)发送文件。