读取xlsx文件错误:xlrd.biffh.XLRDError: Excel xlsx file; not supported

Posted Erick T

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读取xlsx文件错误:xlrd.biffh.XLRDError: Excel xlsx file; not supported相关的知识,希望对你有一定的参考价值。

利用Python库xlrd中的xlrd.open_workbook()函数读取自定义xlsx表格文件时出错如下:

Traceback (most recent call last):
  File "C:/Users/llll/PycharmProjects/pythonProject1/RandomForestRegression.py", line 96, in <module>
    x_train , y_train , x_test , y_test = load_data(2,60,1,9,0,r'C:\\Users\\llll\\Desktop\\特征表.xlsx')
  File "C:/Users/llll/PycharmProjects/pythonProject1/RandomForestRegression.py", line 14, in load_data
    workbook = xlrd.open_workbook(str(FilePath))       #excel路径
  File "C:\\Users\\llll\\PycharmProjects\\pythonProject1\\venv\\lib\\site-packages\\xlrd\\__init__.py", line 170, in open_workbook
    raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
xlrd.biffh.XLRDError: Excel xlsx file; not supported

Process finished with exit code 1

经过查资料总结后得到如下解法:

(1)检查第三方库xlrd的版本:

我这里的版本为xlrd2.0.1最新版本,问题就出在这里,需要卸载最新版本安装旧版本,卸载安装过程如下。

PyCharm查看版本、添加与移除第三方库的方法:

●File-Settings

●Project-Python Interpreter

●移除操作:选中需要删除的包并点减号

●添加操作:点击加号

●搜索框中搜索:

●找到并点击需要安装的包,Install Package:

 按照上述步骤卸载xlrd后再安装xlrd2后,错误解决。

(2)别忘了修改import名称与调用的包名称

读取 .xlsx 并访问单元格值,但不是通过它们的位置

【中文标题】读取 .xlsx 并访问单元格值,但不是通过它们的位置【英文标题】:Reading a .xlsx and accessing cell values but not by their position 【发布时间】:2019-03-15 11:03:37 【问题描述】:

这是我的第一个问题,如果我有一些解释错误,请提前道歉。

我正在使用 python 2.7 进行编码。 我写了一个 .xlsx (Excel) 文件(它可能是一个 .xls,此时我真的不需要宏 + VBA)。 Excel 文件如下所示:

这些值与列名和行名相关联。例如,我有一个名为“Curve 1”的列和一个名为“Number of extremum”的行。所以在那个单元格中,如果curve1有1个极值,我写“1”。 我想取这个值以便在 python 脚本中操作它。 我知道我可以将 xlrd 模块open workbook 一起使用,并将第 1 行的值(“极值数”)放在一个列表中,然后只取第一个(对应于“曲线 1”列,因此对应于我想要的值“1”),但这不是我想要的。

相反,我想通过仅向 python 脚本提供字符串“Curve 1”和“极值数”来访问“1”单元格值,python 将在两者相遇时访问单元格并取它的值:“1”。可能吗 ?

我想这样做是因为 Excel 文件会及时更改,并且可以移动单元格。因此,如果我尝试通过它的“位置编号”(如第 1 行,第 1 列)访问单元格值,如果在此位置添加一列或一行,我会遇到问题。如果 xlsx 文件中有一些编辑,我不想再次编辑 python 脚本。

非常感谢。

【问题讨论】:

【参考方案1】:

Pandas 是一个流行的第三方库,用于读取/写入数据集。您可以使用 pd.DataFrame.at 通过行和列标签进行有效的标量访问:

import pandas as pd

# read file
df = pd.read_excel('file.xlsx')

# extract value
val = df.at['N of extremum', 'Curve 1']

【讨论】:

谢谢!如果我们有 .xls、.xlsm 或 .csv ,该脚本会有所不同吗?如果它在 python 3 上,该脚本会相同吗? 您应该查看Pandas I/O Tools 以了解本机支持的格式。 非常感谢,这正是我所需要的。【参考方案2】:

使用 Pandas 非常容易。要获得你想要的单元格,你可以使用loc,它允许你指定你想要的行和列。

import pandas

df = pandas.read_excel('test.xlsx')
df.loc['N of extremum', 'Curve 1']

【讨论】:

以上是关于读取xlsx文件错误:xlrd.biffh.XLRDError: Excel xlsx file; not supported的主要内容,如果未能解决你的问题,请参考以下文章

Java用于读取和写入xlsx的内存不足错误

如何将 xlsx 或 xls 文件读取为 spark 数据框

在 PhpSpreadsheet 中读取 Xlsx 文件

nodejs-xlsx导出的excel,office打开提示“发现不可读取的内容”?

从xlsx文件获取数据时无法从文本单元格获取数值

无法将 xlsx.file 读取到数据框 Pandas