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

Python生成Excel后设置列宽失效?问题排查与解决

问题分析与解决

错误原因

  1. 文件覆盖问题:你先执行properties()创建了空Excel文件并设置列宽,但随后执行的comparison()用df1.to_excel()直接覆盖了该文件,之前的列宽设置完全丢失。
  2. 列索引错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 01:09:28