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

pd.ExcelWriter赋值book触发AttributeError:跨平台异常求助

问题描述

在向已存在的Excel文件写入数据时,执行以下代码:

book = load_workbook(file_path)
writer = pd.ExcelWriter(file_path, engine = 'openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)

仅在Mac机器上出现错误:

writer.book = book

AttributeError: can't set attribute

Windows机器无此问题。

解决方案

这个问题是由于pandas或openpyxl版本差异导致的——新版本的pandas中,ExcelWriter的book属性已改为只读,无法直接赋值。以下是两种可行的解决方法:

方法一:使用追加模式(推荐)

无需手动加载workbook,直接用mode='a'参数让ExcelWriter自动处理现有文件:

import pandas as pd
from openpyxl import load_workbook

# 假设要写入的数据是df
df = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]})

with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer:
    df.to_excel(writer, sheet_name='目标工作表名', index=False)
  • if_sheet_exists参数可选值:
    • 'replace':替换已存在的工作表
    • 'new':若工作表存在则新建同名工作表(会自动加后缀,比如Sheet1_1)
    • 'overlay':在现有工作表的末尾追加数据

方法二:初始化时传入已加载的workbook

如果需要手动控制workbook的加载逻辑,可在创建ExcelWriter时直接传入book参数,避免后续赋值:

import pandas as pd
from openpyxl import load_workbook

book = load_workbook(file_path)
df = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]})

with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', book=book) as writer:
    df.to_excel(writer, sheet_name='目标工作表名', index=False)

额外检查

让同事执行以下命令,确认pandas和openpyxl版本:

pip show pandas openpyxl

如果版本过新或过旧,可尝试统一到你Windows机器上的版本,也能解决环境差异问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:35:26