同一段pandas写入带格式Excel代码 不同机器出现工作表已存在报错求解
问题排查与解决方案
核心差异点:pandas版本不一致
你本地运行正常、同事设备报错的根本原因是两台设备的pandas版本不同:
- pandas 1.4.0版本之前,没有
if_sheet_exists校验逻辑,手动给writer.sheets赋值即可复用已有工作表,你本地使用的是低于1.4.0的版本,因此旧写法可以正常运行 - pandas 1.4.0及以上版本新增了工作表存在性校验,默认
if_sheet_exists='error',且手动赋值writer.sheets的兼容逻辑被弱化,因此同事设备会触发报错 - 你本地设置
if_sheet_exists='replace'不生效也是因为版本过低,该参数根本不会被识别执行
兼容新版本且保留原有格式的解决方案
不需要使用replace参数,改用if_sheet_exists='overlay'即可,该参数的作用是在已有工作表中叠加写入内容,不会清空原有格式和已存在的单元格内容,符合你的需求。
修正后的代码如下:
from openpyxl import load_workbook import pandas as pd workbook = load_workbook('example.xlsx') sheet = workbook['example_sheet'] sheet.cell(row=8, column=5).value = some.value # 初始化时新增if_sheet_exists='overlay'参数 writer = pd.ExcelWriter( 'example.xlsx', engine='openpyxl', mode='a', if_sheet_exists='overlay' ) writer.book = workbook # 高版本pandas不需要手动赋值writer.sheets,保留该行可兼容低版本 writer.sheets = {ws.title: ws for ws in writer.book.worksheets} df.to_excel(writer, sheet_name='example_sheet', index=False, header=False, startrow=10, startcol=5) writer.close()
验证方法
在两台设备分别执行pip show pandas查看版本号,即可确认差异。如果需要保持多设备代码一致性,可统一升级pandas到1.4.0及以上版本,使用上述修正后的代码即可。
内容的提问来源于stack exchange,提问作者Ale Pan
相关产品推荐
相关产品推荐

