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

Python使用ExcelWriter为已有Excel文件添加格式报错求助

问题分析与解决方案

核心问题

  1. xlsxwriter不支持直接修改已有文件:你用pd.ExcelWriter(path, engine='xlsxwriter')会直接创建新文件覆盖原文件,且此时writer.sheets为空,导致sheet = writer.sheets[r["name"]]返回None,触发NoneType object has no attribute set_column错误。
  2. 变量名不一致:函数参数是dataset,循环里却用了data_set,会导致循环逻辑失效。
  3. 拼写错误:set_solumn应为set_column。

方案一:用xlsxwriter重写数据并添加格式

如果可以接受重写文件,这种方式兼容性好,步骤是先读取原文件数据,再写入时添加格式:

import pandas as pd

def format_file(dataset, path):
    try:
        # 创建ExcelWriter对象,准备写入新文件(或覆盖原文件)
        writer = pd.ExcelWriter(path, engine='xlsxwriter')
        book = writer.book
        
        for r in dataset:
            sheet_name = r["name"]
            df = r['data']
            
            # 先将数据写入工作表
            df.to_excel(writer, sheet_name=sheet_name, index=False)
            
            # 获取刚写入的工作表对象
            sheet = writer.sheets[sheet_name]
            
            # 遍历列,设置格式(这里补全你的格式逻辑)
            for i, col_name in enumerate(df.columns):
                # 示例格式,替换成你的实际格式参数
                align = 'center'
                num_format = '0.00'
                color = '#000000'
                width = 15
                
                cell_format = book.add_format({
                    'align': align,
                    'num_format': num_format,
                    'color': color
                })
                
                # 设置列宽和格式(注意是set_column,拼写正确)
                sheet.set_column(i, i, width, cell_format)
        
        writer.close()
        return path
    except Exception as e:
        print(f"错误:{e}")
        return None

方案二:用openpyxl直接修改已有文件

如果只想修改已有文件的格式,不想重写数据,推荐用openpyxl引擎,它支持修改现有文件:

from openpyxl import load_workbook
from openpyxl.styles import Alignment, Font, numbers

def format_file(dataset, path):
    try:
        # 加载已有Excel文件
        wb = load_workbook(path)
        
        for r in dataset:
            sheet_name = r["name"]
            # 获取目标工作表
            sheet = wb[sheet_name]
            
            # 遍历列,设置格式(这里补全你的格式逻辑)
            for i, col_name in enumerate(r['data'].columns, start=1):  # openpyxl列从1开始
                # 示例格式,替换成你的实际参数
                align = 'center'
                num_format = '0.00'
                color = '000000'
                width = 15
                
                # 设置列宽
                sheet.column_dimensions[chr(64 + i)].width = width
                
                # 创建格式样式
                cell_alignment = Alignment(horizontal=align)
                cell_font = Font(color=color)
                cell_number_format = numbers.FORMAT_NUMBER_00  # 对应num_format='0.00'
                
                # 应用格式到整列(跳过表头的话从第2行开始)
                for row in sheet.iter_rows(min_row=1, max_row=sheet.max_row, min_col=i, max_col=i):
                    for cell in row:
                        cell.alignment = cell_alignment
                        cell.font = cell_font
                        cell.number_format = cell_number_format
        
        # 保存修改后的文件
        wb.save(path)
        return path
    except Exception as e:
        print(f"错误:{e}")
        return None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:15:42