laiyuanjie 发表于 2023-10-8 19:05:46

用openpyxl读取XLS文件的问题

为什么同样都是XLS格式的文件,有些就可以直接读取,有些就不能,,出现了这样的错误提示:
ValueError: Excel file format cannot be determined, you must specify an engine manually.

我照着网上说的,弄了engine指定openpyxl之后,就又出现了这样的提示:
zipfile.BadZipFile: File is not a zip file

isdkz 发表于 2023-10-8 19:06:20

这个问题可能是由于文件格式不正确导致的。XLS格式的文件有多种版本,不同版本的文件可能使用不同的文件格式。如果openpyxl无法正确识别文件格式,就需要手动指定engine来读取文件。

首先,你需要确保你的文件是XLS格式的,而不是XLSX格式的。XLSX格式的文件需要使用不同的库来读取。如果你确定文件是XLS格式的,那么你可以尝试以下方法来读取文件:

import openpyxl

# 打开文件
wb = openpyxl.load_workbook('your_file.xls', read_only=True, keep_vba=False, data_only=True)

# 选择工作表
ws = wb.active

# 读取数据
for row in ws.rows:
    for cell in row:
      print(cell.value)


在这个例子中,我们使用了openpyxl库来读取XLS文件。我们使用 load_workbook 函数来打开文件,并且指定了 read_only=True 和 data_only=True 参数来只读取数据而不读取格式和公式。如果你的文件格式不正确,你可以尝试手动指定engine来读取文件,如下所示:

import openpyxl

# 打开文件
wb = openpyxl.load_workbook('your_file.xls', read_only=True, keep_vba=False, data_only=True, engine='xlrd')

# 选择工作表
ws = wb.active

# 读取数据
for row in ws.rows:
    for cell in row:
      print(cell.value)


在这个例子中,我们手动指定了engine为 xlrd 来读取文件。如果你的文件格式仍然无法被正确识别,你可以尝试使用其他的engine,如 openpyxl 、 xlwt 等。

Mike_python小 发表于 2023-10-8 19:06:35

问题:为什么同样都是XLS格式的文件,有些可以直接读取,有些不能,出现了错误提示?

这是因为XLS文件虽然都是Excel文件,但是Excel文件存在多个版本和类型。由于历史原因,Microsoft Office以及其他软件在处理Excel文件时,也存在多种方式和标准。因此,在Python中使用不同的库或引擎来读取Excel文件,可能会导致文件无法读取或出现错误。

通常情况下,使用openpyxl库可以读取大部分的XLSX格式的Excel文件,但是对于XLS格式的Excel文件就无法保证兼容性。而XLS格式的Excel文件比XLSX格式的文件更为老旧,可能存在着不兼容的问题。

当使用openpyxl读取XLS文件时,会报错"ValueError: Excel file format cannot be determined, you must specify an engine manually.",这是因为openpyxl并不支持直接读取XLS格式的文件,需要指定engine参数为“xlrd”,如下所示:


import openpyxl

workbook = openpyxl.load_workbook(filename="example.xls", engine="xlrd")


但是,有时候会出现如下错误提示:"zipfile.BadZipFile: File is not a zip file",这是因为我们指定了engine参数为“xlrd”,然而openpyxl本身是基于zipfile模块的,因此在读取时需要进行解压缩操作,而由于文件格式不兼容,导致出现了解压缩错误。

如果你使用的是openpyxl 3.0及以上版本,可以通过设置read_only=True参数来避免读取时的解压缩操作,从而规避"BadZipFile"错误:


import openpyxl

workbook = openpyxl.load_workbook(filename="example.xls", engine="xlrd", read_only=True)


建议在读取XLS文件时,可以尝试使用其他的Python库,比如xlrd、pandas等库。这些库对Excel文件的兼容性更好,可以更好地读取各种版本、类型的Excel文件。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

laiyuanjie 发表于 2023-10-8 19:14:55

isdkz 发表于 2023-10-8 19:06
这个问题可能是由于文件格式不正确导致的。XLS格式的文件有多种版本,不同版本的文件可能使用不同的文件格 ...

TypeError: load_workbook() got an unexpected keyword argument 'engine'


试了,,,出现这样的提示,,,试了xlrd,xlwt,都不行

Mike_python小 发表于 2023-10-8 19:17:38

laiyuanjie 发表于 2023-10-8 16:14
TypeError: load_workbook() got an unexpected keyword argument 'engine'




根据您提供的错误信息,`load_workbook()` 函数不支持 `engine` 参数。`openpyxl` 库本身不支持读取 `.xls` 格式的文件,它只支持 `.xlsx` 格式。要读取 `.xls` 格式的文件,您可以使用 `pandas` 库结合 `xlrd` 库来实现。

首先,请确保已安装 `pandas` 和 `xlrd` 库。如果尚未安装,可以使用以下命令安装:

```bash
pip install pandas xlrd
```

然后,您可以使用以下代码读取 `.xls` 文件:


import pandas as pd

# 读取文件
data = pd.read_excel('your_file.xls', engine='xlrd')

# 打印数据
print(data)

这段代码将使用 `pandas` 库读取 `.xls` 文件,并将数据存储在一个 DataFrame 对象中。您可以使用 `print(data)` 打印整个数据表,或者使用其他 `pandas` 函数来操作和分析数据。

laiyuanjie 发表于 2023-10-8 19:19:47

Mike_python小 发表于 2023-10-8 19:06
问题:为什么同样都是XLS格式的文件,有些可以直接读取,有些不能,出现了错误提示?

这是因为XLS文件虽然 ...

一样不行。。。
出现了这样的错误
    workbook = openpyxl.load_workbook('d:/仓库调拨明细帐.xls',read_only=True,engine='xlrd')
TypeError: load_workbook() got an unexpected keyword argument 'engine'

laiyuanjie 发表于 2023-10-8 19:42:56

本帖最后由 laiyuanjie 于 2023-10-8 19:44 编辑

Mike_python小 发表于 2023-10-8 19:17
根据您提供的错误信息,`load_workbook()` 函数不支持 `engine` 参数。`openpyxl` 库本身不支持读取 `.xl ...

No CODEPAGE record, no encoding_override: will use 'iso-8859-1'

又出现了这样的错误。。。然后保存出来也是中文的是乱码

很是奇怪,,这个表格是从一个系统下载下来的,前两天下载的XLS文件就可以读,今天下载的就不行了,,同样下载的方式,同样的格式

laiyuanjie 发表于 2023-10-8 20:49:18

Mike_python小 发表于 2023-10-8 19:17
根据您提供的错误信息,`load_workbook()` 函数不支持 `engine` 参数。`openpyxl` 库本身不支持读取 `.xl ...

没办法了么?{:5_99:}

Mike_python小 发表于 2023-10-8 20:55:31

laiyuanjie 发表于 2023-10-8 17:49
没办法了么?

你可以去问问狗屁通(gpt)
https://c.binjie.fun/

cflying 发表于 2023-10-9 22:55:46

什么样的xls呢,传一个上来瞅瞅

laiyuanjie 发表于 2023-10-30 20:46:38

cflying 发表于 2023-10-9 22:55
什么样的xls呢,传一个上来瞅瞅

嘿嘿嘿嘿。。。问题已经解决了。。。。
页: [1]
查看完整版本: 用openpyxl读取XLS文件的问题