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

如何用Python动态写入Excel多列内容,解决AA列及之后写入报错问题

问题原因
  • 原有列名生成逻辑仅支持A-Z的单字母列名,当列索引≥26时,chr(ord('A') + i)得到的不是合法的Excel列名字符,导致xlsxwriter解析列名失败抛出错误。
  • 原有代码逻辑存在顺序问题:先调用workbook.close()再调用writer.save()会导致重复操作报错,writer.save()本身会自动处理workbook的关闭,无需手动调用workbook.close()。
解决方法

可以使用xlsxwriter自带的xl_col_to_name工具函数,它支持自动将0开始的列索引转换为Excel风格的列名(0对应A、26对应AA、27对应AB,以此类推),完美适配超过26列的使用场景。如果不想处理列名转换,也可以直接使用列索引调用相关方法,写法更简洁。

修改后完整代码(列名转换写法)

import pandas as pd
# 导入列索引转列名的工具函数
from xlsxwriter.utility import xl_col_to_name

writer = pd.ExcelWriter("Sharath.xlsx", engine='xlsxwriter')
df1 = pd.DataFrame()
df1.to_excel(writer, sheet_name='Sheet1', header=True, index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']

merge_format = workbook.add_format({
            'bold': True,
            'text_wrap': True,
            'border': 2,
            'align': 'center',
            'valign': 'vcenter'})

# 要写入多少列就修改range的结束值即可,比如100列就改为range(0,100)
for col_idx in range(0, 50):
    col_name = xl_col_to_name(col_idx)
    columnmerge = f"{col_name}{{}}:{col_name}{{}}"
    worksheet.set_column(f"{col_name}:{col_name}", 20)
    worksheet.merge_range(columnmerge.format(2, 4), "Test", merge_format)

writer.save()
print("Excel file is saved")
print("Report generation completed")

更简洁的索引写法(无需转列名)

xlsxwriter的set_column、merge_range方法本身支持直接传入数字索引作为参数,不需要转换为列名字符串,写法更简单:

import pandas as pd

writer = pd.ExcelWriter("Sharath.xlsx", engine='xlsxwriter')
df1 = pd.DataFrame()
df1.to_excel(writer, sheet_name='Sheet1', header=True, index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']

merge_format = workbook.add_format({
            'bold': True,
            'text_wrap': True,
            'border': 2,
            'align': 'center',
            'valign': 'vcenter'})

for col_idx in range(0, 50):
    # set_column参数:(起始列索引, 结束列索引, 列宽)
    worksheet.set_column(col_idx, col_idx, 20)
    # merge_range参数:(起始行索引, 起始列索引, 结束行索引, 结束列索引, 内容, 格式)
    # Excel行号从1开始,xlsxwriter行索引从0开始,原需求合并2-4行对应索引1-3
    worksheet.merge_range(1, col_idx, 3, col_idx, "Test", merge_format)

writer.save()
print("Excel file is saved")
print("Report generation completed")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:15:02