如何使用xlrd和Python定位和访问命名范围(全局及按工作表)?

1 投票
2 回答
2828 浏览
提问于 2025-04-16 00:43

这里提到的 xlrd 的文档,地址是 http://www.python-excel.org/,说明在最新版本中,现在可以做到某些事情,但没有具体说明怎么做。

2 个回答

1

这不是个简单的事情,在我的情况下,它只在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这样的情况(也就是整列或整行)。

4

我不太确定你在看什么;其实,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这个便利方法可能正是你需要的。

撰写回答