Как найти и получить доступ к именованным диапазонам (глобальным, на каждом листе), используя xlrd, Python? - PullRequest
1 голос
/ 02 июля 2010

Документация для xlrd здесь http://www.python -excel.org / упоминает, что теперь это возможно в последней версии, но не говорит, как.

Ответы [ 2 ]

4 голосов
/ 02 июля 2010

Я не уверен, что вы на самом деле читаете; xlrd доступ к именованным диапазонам доступен уже несколько лет (в версии 0.6.0; последняя версия 0.7.1) и поставляется с полной документацией ab initio.

Это ссылка на документацию 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 может быть тем, что вам нужно.

1 голос
/ 29 июля 2014

Это не тривиально, и в моем случае это работало только на 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 (то есть всей строке или столбцу).

...