首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

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

  •  
  •   pharaoh21c · 231 天前 · 2359 次点击
    这是一个创建于 231 天前的主题,其中的信息可能已经有所发展或是发生改变。
    版本是 3.6,请教各位高手,我有一个 excel 表格,里面列是有名称的,例如 A 列被命名为'NTCC1'。使用 xlrd 中的 sheet.col_values(0)、sheet.cell(0,0).value 命令能够按列序号及单元格地址返回值,但是我想按列名称来检索到该列及该单元格,请问代码应该怎么写?

    如果 xlrd 不能实现,其它 package 能实现吗?如 openpyxl ?非常感谢!
    17 回复  |  直到 2018-07-29 02:26:50 +08:00
        1
    smallzhan   231 天前
    看看 pandas 的 read_xlsx 函数
        2
    smallzhan   231 天前   ♥ 1
    额,说错,是 read_excel 函数
        3
    changnet   231 天前 via Android
    好像不行。openpyxl 只是改进对高版本 excel 的支持,功能接口差不多。

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

    我用得也不多,仅个人意见。
        4
    LuckCode   231 天前 via iPhone
    读出 header,获取指定列名的 index,然后按下标读?
        5
    pharaoh21c   231 天前
    @LuckCode 谢谢哈!弱弱的问一下,怎么读出 header 呀?我网上搜了半天,没看到代码。。。
        6
    pharaoh21c   231 天前
    感谢哈! @smallzhan @changnet 我再试试~~~
        7
    shuax   231 天前
    列名怎么改?
        8
    pharaoh21c   231 天前
    @shuax 我是原来表格里就有列名。。。所以想直接读取
        9
    wangdaqiao   231 天前
    先读出列名所在行(一般是第一行)到一个 list 中,然后就能根据列名找到其在哪一列,后面就很清楚了。
        10
    saulshao   231 天前
    直接就把所有的列名都读出来,然后循环一下就知道你想要的列是在第几列了。
        11
    smallzhan   230 天前
    @pharaoh21c pandas 库啊,没去试一下么,read_excel 读进去数据后,表格里面的第一行,也就是你的标题,自动变成了下,例如简单的 data = pandas.read_excel("xxx.xlsx") 那么可以用 data['NTCC1'] 直接访问这一列。
        12
    pharaoh21c   230 天前
    @smallzhan @saulshao @wangdaqiao 谢谢!其实我说的列明并非第一行的列标题,而是直接将列(如 A 列)改成了另外一个名字如‘ NTCC1 ’(就是你选中了整列以后在左上角有个空格里直接输入‘ NTCC1 ’),A1 单元格是列的中文名称。现在是想读到这个‘ NTCC1 ’列名称,并非在 A1 单元格里的这个列名称。当初用 VBA 写函数的时候这样做比较方便,现在改成 python 了就不知道怎么弄了。现在我改用 openpyxl 了,pandas 等要过会儿再学习了。。。
        13
    LuckCode   230 天前
    @pharaoh21c 我和 #9 的想法是一样的,从回复看来是我想错了。。。
        14
    pharaoh21c   230 天前
    @LuckCode 嗯,内嵌的 VBA 还是有它的优势的,研究中。。。
        15
    Arnie97   229 天前 via Android
    原来这个列名本身还能改啊,囧😳
        16
    pharaoh21c   228 天前
    @Arnie97 是的,改了列名本身的话,使用 VBA 可以直接读取,而不需要再通过循环查找首行列名称来找了,我感觉应该可以节约程序运算时间。。。
        17
    matrix273   208 天前 via Android
    list.index('NTCC1')了解一下,将对应行转换为列表,然后再 sheet.col_values(list.index('NTCC1'))
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3960 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 16ms · UTC 08:07 · PVG 16:07 · LAX 00:07 · JFK 03:07
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1