openpyxl 无法读取严格的 Open XML 电子表格格式:用户警告:文件包含 Sheet1 的无效规范。这将被删除

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

我的一些用户(都使用 Mac)已将 Excel 上传到我的应用程序中,但应用程序拒绝了它,因为该文件似乎是空的。经过一些调试后,我确定该文件以 Strict Open XML Spreedsheet 格式保存,并且 openpyxl (2.6.0) 不会发出错误,而是向 stderr 打印警告。

要重现,请打开一个文件,添加几行并保存为 Strict Open XML Spreedsheet (*.xlsx) 格式。

import openpyxl
with open('excel_open_strict.xlsx', 'rb') as f:
    workbook = openpyxl.load_workbook(filename=f)

这将打印以下警告,但不会抛出任何异常:

UserWarning: File contains an invalid specification for Sheet1. This will be removed

此外,工作簿似乎没有工作表:

assert workbook.get_sheet_names() == []

我现在已经有 3 位 Mac 用户遇到了这个问题。 Mac 似乎有时会默认使用这种 Strict Open XML Spreedsheet 格式。如果这是正常情况,那么 openpyxl 应该能够处理它。否则,如果 openpyxl 只抛出异常那就太好了。作为解决方法,我似乎可以执行以下操作:

import openpyxl
with open('excel_open_strict.xlsx', 'rb') as f:
    workbook = openpyxl.load_workbook(filename=f)

if not workbook.get_sheet_names():
    raise Exception("The Excel was saved in an incorrect format")
python python-3.x openpyxl
3个回答
4
投票

我在使用 R 库 openxlsx 创建的 XLSX 文件时遇到了类似的问题。来自简单 python 程序的示例错误消息,用于打开文件并从工作表 Crops 中检索单个值:

警告(来自警告模块): 文件“C:\Python38\lib\site-packages\openpyxl header\workbook.py",第 88 行 警告(消息) 用户警告:文件包含无效的作物规范。这将被删除

我的第一个非常笨拙的解决方案:

  1. 用Excel打开
  2. 将文件另存为 *.xls,这会触发有关兼容性的警告。
  3. 重新另存为*.xlsx

如果您只需要读取文件,我的第二个解决方案就有效:

  1. 施加只读限制:
    wb = load_workbook(filename = 'CAF_LTAR_crops_out_0.3.xlsx', read_only=True)

最广泛的教训似乎是 XLSX 文件规范并未统一(正确?)跨编程语言实现。


3
投票

我正在使用 Windows PC,并且我遇到了同样的问题

openpyxl
。我得到了一个保存为 Strict Open XML Spreadsheet (*.xlsx) 的 Excel 模板。我尝试填写模板,但每个工作表总是收到如下错误消息,当我尝试打印包含所有工作表名称的数组时,结果为空
[]

UserWarning: File contains an invalid specification for Sheetname. This will be removed

解决方案

我将文件另存为

Excel Workbook (*.xlsx)
not
Strict Open XML Spreadsheet (*.xlsx)
。之后我没有任何错误消息,该数组包含所有工作表,我可以用
openpyxl
填写模板。


0
投票

我注意到当我打开它试图编辑的文件时,这种情况发生在我身上。还不完全确定。

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