Python 连接到openpyxl工作簿以在Flask中下载文件
目标是在Excel工作表中保存多个数据帧(每个数据帧作为一个工作表),并在用户点击指定URL时下载文件 这是代码Python 连接到openpyxl工作簿以在Flask中下载文件,python,pandas,flask,pandas.excelwriter,Python,Pandas,Flask,Pandas.excelwriter,目标是在Excel工作表中保存多个数据帧(每个数据帧作为一个工作表),并在用户点击指定URL时下载文件 这是代码 @app.server.route("/file/excel") def download_excel(): wb = Workbook() df1 = pd.DataFrame(...) sheet1 = wb.active sheet1.title = "Sheet1" for r in data
@app.server.route("/file/excel")
def download_excel():
wb = Workbook()
df1 = pd.DataFrame(...)
sheet1 = wb.active
sheet1.title = "Sheet1"
for r in dataframe_to_rows(df1, index=False, header=True):
sheet1.append(r)
df2 = pd.DataFrame(...)
sheet2 = wb.active
sheet2.title = "Sheet1"
for r in dataframe_to_rows(df2, index=False, header=True):
sheet2.append(r)
excel_stream = io.BytesIO()
wb.save(excel_stream)
excel_stream.seek(0) # go to the beginning of the stream
#
return send_file(
excel_stream,
mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
attachment_filename="File.xlsx",
as_attachment=True,
cache_timeout=0
)
我得到以下错误
AttributeError:“DatetimeArray”对象没有属性“tolist”
df1
有一个数据时间数据类型的列。我做了一些搜索,发现不建议遍历数据帧,这是导致此错误的原因。
另一种方法是使用df.to_excel()
,但我不知道如何让它与BytesIO一起工作,因为我需要流式传输要下载的数据
问题:如何将数据保存到excel工作表并获取错误。
我必须使用flask的
send_file()
在客户端下载该文件。在附加到excel工作表之前,将datatime数据类型转换为字符串解决了该问题。可能有更好的解决方案,但这解决了我的问题您是否尝试过如何处理该问题?问题是否与您的错误有关?因为我觉得您的问题比您在此处显示的错误消息更广泛:)问题是它无法处理datetime数据类型。在附加到writer之前,我简单地转换为string,它运行良好。也许有更好的解决办法,但这解决了我的问题。