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

Posted

技术标签:

【中文标题】读取 .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 并访问单元格值,但不是通过它们的位置的主要内容,如果未能解决你的问题,请参考以下文章

在另一个工作簿选项卡中搜索单元格值并打印数据

用另一个 Excel 工作表单元格值动态更新一个 Excel 工作表的单元格值

根据单元格的变化清除所有下一行的单元格值并保留公式

谷歌表格使用 arrayFormula 和间接通过地址读取单元格值

POI - 如何将单元格值设置为日期并应用默认Excel日期格式?

用于查找单元格值是不是在范围内的双 For 循环