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

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

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

这是您提到的http://www.python-excel.org/页面上提供的xlrd文档链接 。 命中PageDown两次,你应该看到名为引用,常量,公式和macros的一节 。 这给出了一个概述,并指出了Book.name_*方法和Name对象以及演示脚本的文档。

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

更新回应“”“我得到了这么多:someRange = book.name_map [u'somerange'] [0]现在我想遍历它,获取值,获取它的尺寸等现在我该怎么办?我试过dir(someRange)和help(someRange),但是没有太大帮助。“”“

你调用someRangeName类的一个实例。 你需要阅读那个类的文档 。 如果您要阅读演示脚本xlrdnameAPIdemo.py并尝试在您的xls文件上运行它,这将有所帮助。 请注意,“得到它的维度”在逻辑上先于“迭代它,抓取值”; 方便的方法Name.area2d可能是你所需要的。

这不是微不足道的,它在我的情况下只对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 (即整个行或列),则要限制表格中的行数和行数。