我 试图 做 的 是 将 dataframe 数据 附加 到 一 个 现有 的 合法 excel 文件 中 。 我 使用 了 openpyxl 中 的 load _ workbook ( ) 函数 , 但 它 系统 地 返回 了 一 个 错误 。 下面 是 一些 在 我 的 机器 上 崩溃 的 代码 :
from openpyxl import load_workbook
report_path = root_folder + '\\log_report.xlsx'
writer = pd.ExcelWriter(report_path, engine='openpyxl')
writer.book = load_workbook(report_path)
writer.close()
中 的 每 一 个
在 这里 , log_report.xlsx 已经 存在 , 并 通过 pandas . to _ excel ( ) 创建 。 在 用 openpyxl load _ workbook ( ) 打开 之前 , 可以 打开 它 , 编辑 它 , 并 执行 MS Excel 允许 的 任何 操作 。 我 得到 了 以下 错误 返回 :
Traceback (most recent call last):
File "D:/failsafe_counter/main.py", line 419, in <module>
writer.book = load_workbook(report_path)
File "D:\failsafe_counter\venv\lib\site-packages\openpyxl\reader\excel.py", line 315, in load_workbook
reader = ExcelReader(filename, read_only, keep_vba,
File "D:\failsafe_counter\venv\lib\site-packages\openpyxl\reader\excel.py", line 124, in __init__
self.archive = _validate_archive(fn)
File "D:\failsafe_counter\venv\lib\site-packages\openpyxl\reader\excel.py", line 96, in _validate_archive
archive = ZipFile(filename, 'r')
File "C:\Users\XXXX\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1269, in __init__
self._RealGetContents()
File "C:\Users\XXXX\AppData\Local\Programs\Python\Python38-32\lib\zipfile.py", line 1336, in _RealGetContents
raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file
格式
重要 的 方面 是 , 这个 操作 留下 了 最初 的 excel 文件 损坏 , 不 可能 再次 打开 。
初始 文件 是 一 个 合法 的 zip 文件 ( 通过 将 xlsx 重 命名 为 . zip 来 验证 ) 。 一旦 上面 的 小 代码 返回 错误 , 它 就会 将 Excel 文件 转换 为 一 个 空 的 存档 ( 通过 相同 的 过程 验证 ) 。
我 在 我 以前 的 笔记 本 电脑 上 ( 在 windows7 下 ) 成功 地 使用 了 这些 功能 , 但是 自从 我 迁移 到 windows10 下 后 , 我 就 不能 再 使用 它们 了 。
在 某些 配置 中 , openpyxl load _ workbook ( ) 是否 存在 已知 的 问题 ? 您 是否 知道 如何 修复 此 问题 , 或者 有 任何 解决 方法 ?
4条答案
按热度按时间ajsxfq5m1#
我能够复制这个问题。它是
pandas
相关的。在Pandas1.1.5之前一切都很好。在Pandas1.2.0中,他们做了some changes当您使用
它创建了大小为0字节的空文件并覆盖了现有文件,然后在尝试加载它时出现错误。它与
openpyxl
无关,因为最新版本的openpyxl
在panda 1.1.5中运行良好。解决方案-指定
mode='a'
,将上面的行更改为或者-查看@CharlieClark解决方案或this solution,他们在示例化
pd.ExcelWriter
之前加载文件。fv2wmkja2#
例外情况十分明显:openpyxl无法读取该文件,因为它不是zip文件。
pd.ExcelWriter(report_path, engine='openpyxl')
创建了一个新文件,但由于这是一个完全空的文件,openpyxl无法加载它。如果你想在Pandas和openpyxl中处理一个文件,你必须创建一个“book”对象。7kqas0il3#
在我的情况下,当文件是 * 内部 * 在公司域(不是公共)的问题发生。
thtygnil4#
只需检查您在代码中使用的文件是否在Excel中打开。如果已打开,请关闭文件并再次运行代码。