如何使用xlrd和Python定位和访问命名范围(全局及按工作表)?
这里提到的 xlrd
的文档,地址是 http://www.python-excel.org/,说明在最新版本中,现在可以做到某些事情,但没有具体说明怎么做。
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:A
或者1:1
这样的情况(也就是整列或整行)。
我不太确定你在看什么;其实,xlrd库对命名范围的访问已经有几年了(从0.6.0版本开始;最新版本是0.7.1),而且一开始就有完整的文档。
这是xlrd的文档链接,你提到的http://www.python-excel.org/页面上也有。你可以按两次PageDown键,就能看到一个标题为命名引用、常量、公式和宏的部分。这部分给出了一个概述,并指向Book.name_*
方法和Name
对象的文档,还有一个示例脚本。
请注意,这是文档的SVN主干版本,适用于未来的发布版本;它可能提到一个在当前发布版本的xlrd中没有的额外便利方法(你可以从PyPI获取当前版本),并且包含相关的文档文件。
更新 针对“我到这一步了:someRange = book.name_map[u'somerange'][0],现在我想遍历它,获取值,获取它的维度等等。接下来我该怎么做?我试过dir(someRange)和help(someRange),但没什么帮助。”
你所称的someRange
其实是Name
类的一个实例。你需要查看这个类的文档。如果你能阅读示例脚本xlrdnameAPIdemo.py并尝试在你的xls文件上运行它,会对你有帮助。请注意,“获取它的维度”在逻辑上应该在“遍历它,获取值”之前;Name.area2d
这个便利方法可能正是你需要的。