使用pandas+openpyxl生成Excel,如何设置文件以非全屏打开?
问题
我用以下代码生成Excel文件,代码运行正常,但生成的文件打开时总是全屏显示,给终端用户带来了困扰,有没有办法调整文件设置?
jsreport = filtered_report if isinstance(jsreport, dict): jsreport = [jsreport] df = pd.DataFrame(jsreport) # Generate the Excel file in memory output = BytesIO() with pd.ExcelWriter(output, engine='openpyxl') as writer: df.to_excel(writer, index=False) output.seek(0) # Send the file to the user for download return send_file(output, as_attachment=True, download_name=f"report_{month_year}.xlsx", mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
我查阅了pandas的ExcelWriter文档和openpyxl的工作表尺寸相关文档,但未找到所需内容。
解决方案
要解决Excel打开时全屏的问题,可通过openpyxl直接操作工作簿的窗口视图设置,具体修改如下:
- 在
ExcelWriter的上下文管理器中,获取底层的openpyxl工作簿对象 - 将工作簿的窗口视图设置为普通模式,覆盖默认的全屏设置
- 可选:调整窗口初始宽高,优化打开后的显示尺寸
修改后的完整代码:
import pandas as pd from io import BytesIO jsreport = filtered_report if isinstance(jsreport, dict): jsreport = [jsreport] df = pd.DataFrame(jsreport) # Generate the Excel file in memory output = BytesIO() with pd.ExcelWriter(output, engine='openpyxl') as writer: df.to_excel(writer, index=False) # 获取openpyxl工作簿实例 workbook = writer.book # 遍历工作簿视图,设置为普通模式 for view in workbook.views: view.window_view = 'normal' # 可选:设置窗口初始宽高(单位为缇,1缇=1/20磅) workbook.views[0].window.width = 12000 workbook.views[0].window.height = 8000 output.seek(0) # Send the file to the user for download return send_file(output, as_attachment=True, download_name=f"report_{month_year}.xlsx", mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
关键说明:
window_view的可选值有'normal'(普通视图)、'pageLayout'(页面布局视图)、'pageBreakPreview'(分页预览视图),设置为'normal'即可取消全屏- 若工作簿存在多个视图,需遍历修改;默认情况下工作簿只有一个视图,直接修改
workbook.views[0]也可行 - 窗口宽高单位为缇,可根据需求调整数值,适配不同用户的屏幕
内容的提问来源于stack exchange,提问作者Gabrie
相关产品推荐
相关产品推荐

