Python 烧瓶及;不使用BytesIO更改列格式

Python 烧瓶及;不使用BytesIO更改列格式,python,excel,pandas,Python,Excel,Pandas,在“我的烧瓶”页面上,用户可以从pandas数据框下载包含数据的excel文件,weekly\u data。我正在使用BytesIO和xlsxwriter引擎 当我编辑工作表。设置列的值,比如列宽或时间格式,刷新服务器和页面时,Excel工作表的格式与以前完全相同 以下是当用户单击链接下载数据时调用的路由中的代码部分: fn = 'weeklydata_'+(datetime.today().date()).strftime('%d-%b-%y')+'.xlsx' output = Bytes

在“我的烧瓶”页面上,用户可以从pandas数据框下载包含数据的excel文件,
weekly\u data
。我正在使用BytesIO和xlsxwriter引擎

当我编辑
工作表。设置列的值,比如列宽或时间格式,刷新服务器和页面时,Excel工作表的格式与以前完全相同

以下是当用户单击链接下载数据时调用的路由中的代码部分:

fn = 'weeklydata_'+(datetime.today().date()).strftime('%d-%b-%y')+'.xlsx'

output = BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')

weekly_data.to_excel(writer, sheet_name='Sheet1')

workbook = writer.book
worksheet = writer.sheets['Sheet1']

formatTimes = workbook.add_format({'num_format':'hh:mm'})

worksheet.set_column('B:C',None,formatTimes)

worksheet.set_column('A:A',13)
worksheet.set_column('B:C',16)


writer.save()
output.seek(0)

return send_file(output, attachment_filename=fn, as_attachment=True)
此外,我在代码之前添加了
print(weekly_data)
,只是为了检查数据框是否正确,并且在下载Excel文件时它不会打印,所以我假设这可能是由于BytesIO?我还有另一个途径,使用类似的代码下载Excel,如果相关的话

还有什么可以看到变化的吗?谢谢你的帮助


与当前问题无关,但时间格式是否可以处理大于24小时的小时数?在我提到的另一个Excel文件中,所有格式都可以工作(我不久前为该Excel创建了代码),但是当我双击它时,任何超过24小时的格式都会恢复为类似于
02/01/1900 04:31:00
(对于52:31)?

至于您的主要问题-如果您更改了代码,但下载的文件是相同的,这几乎肯定是一个缓存问题。 (BytesIO是确定性的。web应用程序缓存策略没有那么多)

缓存可能发生在浏览器端。如果是这样的话,从匿名会话访问相同的视图,甚至强制完全重新加载(google chrome上的shift+f5)都可以

如果您的系统部署在Flask development server之外的其他地方,那么缓存可能会在中间层中进行—您必须检查您的配置才能找到答案。一种解决方法是为每个请求生成不同的URL—一个在服务器端被忽略的“noise”参数,但这将迫使缓存基础结构始终传递完整的请求。换句话说:在URL上为生成此文件的请求插入一个带有随机数据的未使用参数

显示超过24小时
不确定Excel是否会接受它,但数据框列dtype应该设置为“timedelta64[ns]”,而不是“datetime”或“time”。

似乎缓存是个问题,我以匿名方式打开了它,出现了更改(但cmd+shift+r在正常会话中不起作用,我必须重新启动chrome)。至于timedelta,我不确定它是否与Excel一起工作,所以我暂时将它作为字符串保留。谢谢Timedelta不打算被excel理解——其想法是,Pandas excel exporter过滤器将其理解为“时间量”,并设置适当的excel列类型。(我没有尝试从canvas side=中指定列类型,但在电子表格程序中,我必须将列数设置为“时间”并将演示文稿掩码设置为HH:MM.0以使其正常工作)