【问题标题】:How to locate and access named ranges (global, nd per-worksheet) using xlrd, Python?如何使用 xlrd,Python 定位和访问命名范围(全局,每个工作表)?
【发布时间】:2010-07-02 03:22:51
【问题描述】:

xlrd 的文档在这里 http://www.python-excel.org/ 提到现在可以在最新版本中使用,但没有说明如何。

【问题讨论】:

    标签: python excel xlrd named-ranges


    【解决方案1】:

    我不确定您实际阅读的是什么; xlrd 对命名范围的访问已经有好几年了(在 0.6.0 版中;最新版本是 0.7.1 版),并且从头开始附带完整的文档。

    This is the xlrd documentation link 在您提到的http://www.python-excel.org/ 页面上给出。点击 PageDown 两次,您应该会看到标题为命名引用、常量、公式和宏的部分。这提供了一个概述,并为您指出了 Book.name_* 方法和 Name 对象的文档,以及一个演示脚本。

    请注意,这是文档的 SVN 主干版本,适用于未来版本;它可能会提到一种额外的便利方法,该方法在当前发布的 xlrd 版本中不可用(您可以从 PyPI 获得),其中包括相关的文档文件。

    更新以响应“”“我已经走到了这一步:someRange = book.name_map[u'somerange'][0] 现在我想迭代它,获取值,获取它尺寸等。现在我该怎么办?我尝试了 dir(someRange) 和 help(someRange) 并没有太大帮助。"""

    您调用的someRangeName 类的一个实例。您需要阅读documentation of that class。如果您要阅读 the demonstration script xlrdnameAPIdemo.py 并尝试在您的 xls 文件上运行它,将会有所帮助。请注意,“获取其尺寸”在逻辑上先于“迭代它,获取值”;方便的方法Name.area2d 可能是你需要的。

    【讨论】:

    • 好的,John,我已经走到这一步了:someRange = book.name_map[u'somerange'][0] 现在我想遍历它,获取值,获取它的尺寸等等。现在我该怎么办?我试过dir(someRange)help(someRange) 并没有太大帮助。谢谢。
    【解决方案2】:

    这不是微不足道的,在我的情况下,它只在 XLS 没有 XLSX 上有效(可能是因为在我的 XLSX name.evaluated == 0 上):

    name = book.name_map['my_named_range'][0]
    assert name.result.kind == xlrd.oREF
    ref3d = name.result.value[0]
    for sheet_index in range(ref3d.shtxlo, ref3d.shtxhi):
        sheet = book.sheet_by_index(sheet_index)
        for row in range(ref3d.rowxlo, min(ref3d.rowxhi, sheet.nrows)):
            for col in range(ref3d.colxlo, min(ref3d.colxhi, sheet.ncols)):
                cell = sheet.cell(row, col)
                # TODO: Do something with that cell.
    

    您希望限制工作表中的列数和行数,以防您的范围类似于A:A1:1(即整行或整列)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      相关资源
      最近更新 更多