1

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

4

2 回答 2

4

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

这是您提到的http://www.python-excel.org/页面上提供的 xlrd 文档链接。点击 PageDown 两次,您应该会看到标题为 Named references, constants, formulas, and macros的部分。这提供了一个概述,并指向Book.name_*方法和Name对象的文档以及演示脚本。

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

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

您所调用someRange的是Name该类的一个实例。您需要阅读该类的文档。如果您要阅读演示脚本 xlrdnameAPIdemo.py并尝试在您的 xls 文件上运行它,将会有所帮助。请注意,“获取其尺寸”在逻辑上先于“迭代它,获取值”;方便的方法Name.area2d可能是您需要的。

于 2010-07-02T03:59:06.507 回答
1

这不是微不足道的,它仅在 XLS no 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(即整行或整列)。

于 2014-07-28T20:29:19.430 回答