Python生成Excel后设置列宽失效?问题排查与解决
问题分析与解决
错误原因
- 文件覆盖问题:你先执行
properties()创建了空Excel文件并设置列宽,但随后执行的comparison()用df1.to_excel()直接覆盖了该文件,之前的列宽设置完全丢失。 - 列索引错误:xlsxwriter中列的索引从0开始计数,
worksheet.set_column(1,1,30)实际设置的是B列宽度,而非目标A列(A列对应索引0)。
修正后的代码
直接让pandas使用xlsxwriter作为写入引擎,在同一操作中完成数据写入与格式设置,避免文件被覆盖:
import pandas as pd import numpy as np import xlsxwriter as xw def comparison(): df1 = pd.read_excel('Testing.xlsx', 'Sheet1') df2 = pd.read_excel('Testing.xlsx', 'Sheet2') # 对比差异并标记 comparison_values = df1.values == df2.values rows, cols = np.where(comparison_values == False) for row, col in zip(rows, cols): df1.iloc[row, col] = f"{df1.iloc[row, col]} --> {df2.iloc[row, col]}" # 使用xlsxwriter引擎写入Excel,同时配置格式 writer = pd.ExcelWriter('./Excel_diff.xlsx', engine='xlsxwriter') df1.to_excel(writer, index=False, header=True) # 获取工作表对象,设置A列(索引0)宽度为30 worksheet = writer.sheets['Sheet1'] worksheet.set_column(0, 0, 30) # 保存并关闭文件 writer.close() # 执行对比函数 comparison()
关键修改说明
- 合并两个函数逻辑,通过
pd.ExcelWriter指定xlsxwriter引擎,确保数据写入与格式设置在同一文件会话中完成,避免覆盖问题。 - 将
set_column的列索引从1,1改为0,0,正确指向A列。 - 用f-string替代
format方法,简化代码写法。
内容的提问来源于stack exchange,提问作者CJ. T
相关产品推荐
相关产品推荐

