读取 .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 和间接通过地址读取单元格值