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
相关产品推荐
相关产品推荐

