Python openpyxl Пакет с определенными именами не распознает именованные диапазоны - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть рабочая книга, которую мне нужно изменить с помощью openpyxl. Рабочая книга содержит таблицы, которые являются источниками сводных таблиц. Я назначил имена таблицам в диспетчере имен в Excel. Я хотел бы получить доступ к этим диапазонам в openpyxl, чтобы заменить данные обновленной информацией, но openpyxl, похоже, не распознает существующие диапазоны.

Я следовал коду, найденному в документации на сайте openpyxl , но безуспешно. Даже когда я успешно следую инструкциям по созданию именованного диапазона (это не то, что я действительно хочу сделать - я хочу получить доступ к существующим именованным диапазонам), только что созданный именованный диапазон действует только при открытом файле и не сохраняется при сохранении файл.

Я проверил, чтобы убедиться, что область каждого именованного диапазона - «Рабочая книга», а ws._tables[0].name дает мне правильное имя таблицы, но мне не удалось выяснить, как манипулировать данными в нем или определите, сколько строк / столбцов и т. д. c. он содержит данные, которые я могу заменить.

from openpyxl import load_workbook
wb = load_workbook(args.xlfile)
try:
    source_cm = wb.defined_names['tblAcq']
except KeyError as e:
    print(e)

Чего мне не хватает?

1 Ответ

0 голосов
/ 04 февраля 2020

Я не испытываю те же проблемы, что и у вас. Используя модуль определенное_имя , я могу создавать, сохранять и получать доступ к именованным диапазонам на листе Excel.

import openpyxl
from openpyxl import *
from openpyxl.styles import NamedStyle

wb = load_workbook("document.xlsx")
ws = wb.active
#new_range = openpyxl.workbook.defined_name.DefinedName('newrange', attr_text='Sheet!$B$1:$B$5') 
#wb.defined_names.append(new_range)
print(wb.defined_names.get('newrange'))
wb.save('document.xlsx')

После сохранения документа с новым именованным диапазоном я get() defined_names в рабочей книге с использованием print(wb.defined_names.get('newrange'))

выходных данных

<openpyxl.workbook.defined_name.DefinedName object>
Parameters:
name='newrange', comment=None, customMenu=None, description=None, help=None, statusBar=None, localSheetId=None, hidden=None, function=None, vbProcedure=None, xlm=None, functionGroupId=None, shortcutKey=None, publishToServer=None, workbookParameter=None, attr_text='Sheet!$B$1:$B$5'
...