xlrd
这里
的文档http://www.python-excel.org/
提到现在可以在最新版本中使用,但没有说明如何。
2 回答
我不确定您实际上在阅读什么;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
可能是您需要的。
这不是微不足道的,它仅在 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:A
或1:1
(即整行或整列)。