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

