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

2024-09-28 22:01:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

若要复制,请打开一个文件,添加几行,然后另存为严格的open XML Speedsheet(*.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() == []

我现在有三个Mac用户遇到过这个问题。看起来Mac有时会默认使用这种严格的开放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")

Tags: 文件用户import应用程序警告mac格式with
1条回答
网友
1楼 · 发布于 2024-09-28 22:01:08

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

警告(来自警告模块): 文件“C:\Python38\lib\site packages\openpyxl\reader\workbook.py”,第88行 警告(msg) UserWarning:文件包含无效的作物规范。这将被删除

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

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

如果您只需要读取文件,我的第二个解决方案就可以工作:

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

广泛的教训似乎是XLSX文件规范没有在编程语言之间统一(正确地?)实现

相关问题 更多 >