鱼C论坛

 找回密码
 立即注册
查看: 2415|回复: 10

用openpyxl读取XLS文件的问题

[复制链接]
发表于 2023-10-8 19:05:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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 openpyxlworkbook = 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 openpyxlworkbook = openpyxl.load_workbook(filename="example.xls", engine="xlrd", read_only=True)
建议在读取XLS文件时,可以尝试使用其他的Python库,比如xlrd、pandas等库。这些库对Excel文件的兼容性更好,可以更好地读取各种版本、类型的Excel文件。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


试了,,,出现这样的提示,,,试了xlrd,xlwt,都不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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` 函数来操作和分析数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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文件就可以读,今天下载的就不行了,,同样下载的方式,同样的格式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-8 20:49:18 | 显示全部楼层
Mike_python小 发表于 2023-10-8 19:17
根据您提供的错误信息,`load_workbook()` 函数不支持 `engine` 参数。`openpyxl` 库本身不支持读取 `.xl ...

没办法了么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-8 20:55:31 | 显示全部楼层

你可以去问问狗屁通(gpt)
https://c.binjie.fun/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-9 22:55:46 | 显示全部楼层
什么样的xls呢,传一个上来瞅瞅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-30 20:46:38 | 显示全部楼层
cflying 发表于 2023-10-9 22:55
什么样的xls呢,传一个上来瞅瞅

嘿嘿嘿嘿。。。问题已经解决了。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表