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

pandas ExcelWriter设置居中对齐后输出Excel文件打开报错求助

问题原因

  • 第一种写法错误:add_format() 方法仅接收1个包含所有格式属性的字典作为参数,你传入了2个独立字典,导致格式对象生成异常,最终输出的Excel文件结构损坏。
  • 第二种写法错误:set_column() 方法的最后一个可选参数仅支持列级属性配置(如隐藏、分级显示等),单元格对齐属于格式对象的属性,不能直接写在该参数中,错误的参数会触发格式冲突,导致文件无法打开。

正确写法

你只需要把对齐属性和数字格式属性写到同一个add_format()的参数字典里即可,修改后的完整有效代码如下:

import os
import pandas as pd
from datetime import date

# 前面的路径、df2生成逻辑保持不变
excel_path = os.path.join(path,'Report For Yr '+str(date.today().year)+' Mth ' +mth+'.xlsx')
writer = pd.ExcelWriter(excel_path, engine='xlsxwriter')
df2.to_excel(writer, sheet_name='report')
workbook  = writer.book
worksheet = writer.sheets['report']

# 格式定义时统一加align: center属性
format1 = workbook.add_format({'num_format': '#,###', 'align': 'center'})
format2 = workbook.add_format({'num_format': '0.00%', 'align': 'center'})
format3 = workbook.add_format({'num_format': '#,##0.00', 'align': 'center'})

# 列设置逻辑保持不变
worksheet.set_column('B:I', 10, format1)
worksheet.set_column('J:J', 10, format2)
worksheet.set_column('L:L', 10, format2)
worksheet.set_column('K:K', 10, format3)

writer.save() 

如果只需要给部分列设置居中,不需要所有格式都居中,可以单独新建专属格式对象,比如:

# 原有无居中的通用格式
format1 = workbook.add_format({'num_format': '#,###'})
# 单独给B列用的带居中的格式
format1_center = workbook.add_format({'num_format': '#,###', 'align': 'center'})

# B列用带居中的格式,C-I列用普通format1
worksheet.set_column('B:B', 10, format1_center)
worksheet.set_column('C:I', 10, format1)

注意事项

运行新代码前请先删除之前生成的损坏Excel文件,避免本地文件缓存导致验证异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:54:04