将 Strictly Open xlsx 加载到 Python 中

问题描述 投票:0回答:1

在尝试将 xlsx 工作簿加载到 Python 中时,我收到以下错误:
ValueError:无法读取工作簿:无法从 [FILE PATH] 读取属性。这很可能是因为工作簿源文件包含一些无效的 XML。请参阅例外情况以了解更多详细信息。

我尝试了这些代码行但没有成功:

test = openpyxl.load_workbook(file_path,data_only=True)

test2 = pd.read_excel(file_path, engine='openpyxl')

我知道文件路径是正确的,并且根据一些谷歌搜索,该文件无法通过Python打开的原因似乎是因为该文件不是Excel工作簿xlsx,而是严格打开xlsx。如果我手动将文件重新保存为 Excel Workbook xlsx,则没有问题。然而,这个项目将使用许多以相同方式保存的文件,所以我想尽可能避免手动解决方案。

python pandas openpyxl
1个回答
0
投票

我遇到了类似但不完全相同的问题,数百个以 xlsx 扩展名保存的 Excel 文件由于旧文件格式(无法记住确切的详细信息)而无法由 openpyxl(或 pandas)打开。我使用 xlwings 库的函数解决了这个问题。可能只适用于 Windows。我不能 100% 确定这会解决您的特定问题,但我也希望它能解决,因为它相当于手动重新保存。代码来了:

import pathlib
import xlwings as xw
from collections.abc import Iterable


def resave_excel_files(file_paths: Iterable[pathlib.Path]):
    allowed_suffixes = {".xlsx", ".xlsm"}

    with xw.App(visible=False) as app:

        for path in file_paths:

            if not (path.is_file() and (path.suffix in allowed_suffixes)):
                print(f"{path} is not a valid excel-file path, skipping!")
                continue

            try:
                wb = app.books.open(path)
                wb.save(path)
                wb.close()
                print("Resaved: ", path.name)
            except Exception as err:
                print(f"\nCOULDN'T RESAVE {path.name} ERROR INFO:")
                print(f"{err}, {type(err)}\n")


if __name__ == "__main__":
    dir_path = pathlib.Path("path/to/relevant/dir")
    paths = [ path for path in dir_path.iterdir() if path.is_file() ]
    resave_excel_files(paths)

希望对您有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.