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

调用writer.close()时出现UnsupportedOperation: truncate错误求助

解决ExcelWriter调用close()时的UnsupportedOperation: truncate错误

执行以下代码时,调用writer.close()出现UnsupportedOperation: truncate错误,代码在一台系统正常运行,另一台系统报错:

RA = pd.read_excel(file_path, header=0, sheet_name="Data")
pivot_df = pd.DataFrame(RA)
#Inserting Pivot
pivot = pivot_df[filter2].pivot_table(index=['a','b', 'c'], values=['Total1','Total2'], aggfunc='sum', margins=True, margins_name='Total')

#copy & pasting pivot to Summary sheet
writer = pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay')
pivot.to_excel(writer, sheet_name='Summary', index=True)

writer.close()
writer.handles = None

可行解决方案

  • 改用上下文管理器自动管理资源
    放弃手动调用close(),用with语句让Python自动处理文件资源的打开和关闭,避免手动释放资源时的异常:

    RA = pd.read_excel(file_path, header=0, sheet_name="Data")
    pivot_df = pd.DataFrame(RA)
    pivot = pivot_df[filter2].pivot_table(index=['a','b', 'c'], values=['Total1','Total2'], aggfunc='sum', margins=True, margins_name='Total')
    
    with pd.ExcelWriter(file_path, engine='openpyxl', mode='a', if_sheet_exists='overlay') as writer:
        pivot.to_excel(writer, sheet_name='Summary', index=True)
    # with块结束后自动完成写入和关闭,无需额外操作
    
  • 统一库版本
    两台系统的pandas或openpyxl版本差异可能引发该问题:

    • 在两台系统分别执行pip show pandas openpyxl查看版本信息
    • 将两边的库版本统一,比如升级到最新稳定版:pip install --upgrade pandas openpyxl
  • 检查文件占用情况
    确保目标Excel文件未被其他程序(如Excel客户端)占用,同时检查代码中是否有其他地方打开该文件但未正确关闭,避免文件句柄冲突。

  • 替换追加模式的实现逻辑(备选)
    如果上述方法无效,可以通过加载现有工作簿的方式修改工作表:

    from openpyxl import load_workbook
    
    RA = pd.read_excel(file_path, header=0, sheet_name="Data")
    pivot_df = pd.DataFrame(RA)
    pivot = pivot_df[filter2].pivot_table(index=['a','b', 'c'], values=['Total1','Total2'], aggfunc='sum', margins=True, margins_name='Total')
    
    # 加载现有工作簿
    book = load_workbook(file_path)
    writer = pd.ExcelWriter(file_path, engine='openpyxl')
    writer.book = book
    # 删除原有Summary表后重新写入
    if 'Summary' in writer.book.sheetnames:
        del writer.book['Summary']
    pivot.to_excel(writer, sheet_name='Summary', index=True)
    writer.save()
    writer.close()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:58:15