xlrd 如何按 excel 列名称读取特定列及单元格?

2018-07-05 23:02:07 +08:00
 pharaoh21c
版本是 3.6,请教各位高手,我有一个 excel 表格,里面列是有名称的,例如 A 列被命名为'NTCC1'。使用 xlrd 中的 sheet.col_values(0)、sheet.cell(0,0).value 命令能够按列序号及单元格地址返回值,但是我想按列名称来检索到该列及该单元格,请问代码应该怎么写?

如果 xlrd 不能实现,其它 package 能实现吗?如 openpyxl ?非常感谢!
8822 次点击
所在节点    Python
17 条回复
smallzhan
2018-07-05 23:54:40 +08:00
看看 pandas 的 read_xlsx 函数
smallzhan
2018-07-05 23:55:18 +08:00
额,说错,是 read_excel 函数
changnet
2018-07-06 01:24:19 +08:00
好像不行。openpyxl 只是改进对高版本 excel 的支持,功能接口差不多。

如果文档没法固定列这一列,或者这一列的范围,excel 本身就没有多少列,循环查找不就可以了么。

我用得也不多,仅个人意见。
LuckCode
2018-07-06 09:23:03 +08:00
读出 header,获取指定列名的 index,然后按下标读?
pharaoh21c
2018-07-06 10:11:34 +08:00
@LuckCode 谢谢哈!弱弱的问一下,怎么读出 header 呀?我网上搜了半天,没看到代码。。。
pharaoh21c
2018-07-06 10:12:16 +08:00
感谢哈! @smallzhan @changnet 我再试试~~~
shuax
2018-07-06 10:52:07 +08:00
列名怎么改?
pharaoh21c
2018-07-06 11:17:50 +08:00
@shuax 我是原来表格里就有列名。。。所以想直接读取
wangdaqiao
2018-07-06 13:54:40 +08:00
先读出列名所在行(一般是第一行)到一个 list 中,然后就能根据列名找到其在哪一列,后面就很清楚了。
saulshao
2018-07-06 14:18:39 +08:00
直接就把所有的列名都读出来,然后循环一下就知道你想要的列是在第几列了。
smallzhan
2018-07-06 20:33:16 +08:00
@pharaoh21c pandas 库啊,没去试一下么,read_excel 读进去数据后,表格里面的第一行,也就是你的标题,自动变成了下,例如简单的 data = pandas.read_excel("xxx.xlsx") 那么可以用 data['NTCC1'] 直接访问这一列。
pharaoh21c
2018-07-06 21:53:49 +08:00
@smallzhan @saulshao @wangdaqiao 谢谢!其实我说的列明并非第一行的列标题,而是直接将列(如 A 列)改成了另外一个名字如‘ NTCC1 ’(就是你选中了整列以后在左上角有个空格里直接输入‘ NTCC1 ’),A1 单元格是列的中文名称。现在是想读到这个‘ NTCC1 ’列名称,并非在 A1 单元格里的这个列名称。当初用 VBA 写函数的时候这样做比较方便,现在改成 python 了就不知道怎么弄了。现在我改用 openpyxl 了,pandas 等要过会儿再学习了。。。
LuckCode
2018-07-06 23:24:07 +08:00
@pharaoh21c 我和 #9 的想法是一样的,从回复看来是我想错了。。。
pharaoh21c
2018-07-07 00:02:37 +08:00
@LuckCode 嗯,内嵌的 VBA 还是有它的优势的,研究中。。。
Arnie97
2018-07-08 11:41:22 +08:00
原来这个列名本身还能改啊,囧😳
pharaoh21c
2018-07-08 20:12:28 +08:00
@Arnie97 是的,改了列名本身的话,使用 VBA 可以直接读取,而不需要再通过循环查找首行列名称来找了,我感觉应该可以节约程序运算时间。。。
matrix273
2018-07-29 02:26:50 +08:00
list.index('NTCC1')了解一下,将对应行转换为列表,然后再 sheet.col_values(list.index('NTCC1'))

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/468502

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX