You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas导出DataFrame至Excel自动调整列宽,AWS部署后触发'Worksheet' object has no attribute 'set_column'错误

解决AWS环境下ExcelWriter Worksheet无set_column属性的问题

这个问题看起来有点诡异,但核心原因其实是Pandas在不同环境下默认使用的Excel引擎不一致——哪怕Python和Pandas版本完全相同,也会出现这种情况。

问题根源

你代码里的set_column是xlsxwriter库中Worksheet对象的专属方法,但如果AWS环境中Pandas默认使用的是openpyxl(或其他不支持该方法的引擎),那么writer.sheets[k]返回的就是openpyxl的Worksheet对象,自然没有set_column属性。

解决方案

1. 明确指定ExcelWriter使用xlsxwriter引擎

修改你的ExcelWriter初始化代码,显式指定engine='xlsxwriter',确保使用支持set_column的引擎:

from pandas import ExcelWriter

# 初始化writer时指定引擎为xlsxwriter
writer = ExcelWriter("output_file.xlsx", engine="xlsxwriter")

final_1 = { ... } # 你的DataFrame字典

# 写入所有sheet
for k, v in final_1.items():
    v.to_excel(writer, sheet_name=k, index=False)

# 调整列宽
for k, v in final_1.items():
    worksheet = writer.sheets[k]
    for column in v:
        column_length = max(v[column].astype(str).map(len).max(), len(column))
        col_idx = v.columns.get_loc(column)
        worksheet.set_column(col_idx, col_idx, column_length + 1)

# 务必关闭writer完成写入
writer.close()

2. 确保AWS环境安装了xlsxwriter

本地环境可能已经装了xlsxwriter,但AWS部署时可能遗漏了这个依赖。在你的requirements.txt中添加:

xlsxwriter>=3.0.0

或者在部署脚本中执行pip install xlsxwriter,确保依赖库存在。

备选方案:如果想用openpyxl引擎

如果你更倾向于使用openpyxl,可以调整列宽的代码适配openpyxl的API(openpyxl通过column_dimensions来设置列宽):

from pandas import ExcelWriter
from openpyxl.utils import get_column_letter

writer = ExcelWriter("output_file.xlsx", engine="openpyxl")

final_1 = { ... } # 你的DataFrame字典

for k, v in final_1.items():
    v.to_excel(writer, sheet_name=k, index=False)

for k, v in final_1.items():
    worksheet = writer.sheets[k]
    for column in v:
        column_length = max(v[column].astype(str).map(len).max(), len(column))
        col_idx = v.columns.get_loc(column)
        # openpyxl的列字母是从A开始,所以索引要+1
        col_letter = get_column_letter(col_idx + 1)
        worksheet.column_dimensions[col_letter].width = column_length + 1

writer.close()

为什么本地正常?

因为你本地环境中xlsxwriter是默认引擎(或者Pandas优先找到了xlsxwriter),而AWS环境中可能默认使用了openpyxl,导致API不兼容。

内容的提问来源于stack exchange,提问作者Rahul Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:43:12