【问题标题】:Corrupted Workbook when written with openpyxl in pandas在 pandas 中使用 openpyxl 编写时损坏的工作簿
【发布时间】:2021-09-26 18:01:13
【问题描述】:

我编写了下面的代码来使用 pandas 写入工作簿。想法是如果已经存在同名的工作簿,则向工作簿添加一个新工作表,否则创建一个新工作簿。

import pandas as pd
from pathlib import Path
from openpyxl import load_workbook

xls = pd.ExcelFile("test.xlsx")
df = pd.read_excel(xls, "Sheet1")

op_name = "op.xlsx"
my_file = Path(op_name)
if my_file.exists():
    book = load_workbook(my_file)
    writer = pd.ExcelWriter(op_name, engine='openpyxl', mode='a')
    writer.book = book
    df.to_excel(writer, sheet_name="r2")
else:
    writer = pd.ExcelWriter(op_name, engine='openpyxl')
    df.to_excel(writer, sheet_name="r1")
writer.save()
writer.close()

但是在打开输出工作簿时出现以下错误:

我们发现“op.xlsx”中的某些内容存在问题。您希望我们尽可能多地尝试和恢复吗?

我尝试了此代码的多种变体,但没有任何效果。 任何有关如何解决此问题的建议都将受到高度赞赏。

【问题讨论】:

  • 如果没有可重复的示例,将很难为您提供帮助
  • @Roim 运行我帖子中分享的代码可以重现错误
  • 有任何excel文件吗?还是依赖于 test.xlsx?
  • 您可以使用任何excel文件。我的测试文件有两行两列,其余都是空白
  • 拒绝投票,因为不可复制。提供您遇到问题的 xlsx。

标签: python excel pandas dataframe openpyxl


【解决方案1】:

嗨,如果 pandas 版本 >= 1.2,您使用的 pandas 版本是什么,此错误发生在 GitHub 中的此错误报告中所述。将您的 pandas 版本降低到 1.1.5,或者如果您特别使用这个较新版本,请编辑库 python 文件,如下所示。

在 pandas/io/excel/_openpyxl.py 添加以下几行

self.handles.handle.seek(0)
self.handles.handle.truncate()

这条线以下

self.book = load_workbook(self.handles.handle)

此修复仅适用于 pandas >= 1.2 库。

【讨论】:

    【解决方案2】:

    op_name 只是文件名。 my_file 变量具有文件路径。 ExcelWriter() 接受文件路径参数而不是文件名。

    试试writer = pd.ExcelWriter(my_file, engine='openpyxl', mode='a')

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      相关资源
      最近更新 更多