Использование Openpyxl Python для индекса соответствия - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь создать инструмент, который будет запускать сопоставление индекса в ячейке электронной таблицы, а затем отображать результат формулы в python. Насколько я понимаю, Openpyxl на самом деле не будет запускать формулы, но я могу написать в Excel, а затем обновить файл для его запуска?

from openpyxl import load_workbook
path= "C:\\Users\\Me\\Documents\\Python\\File.xlsx"
myworkbook=load_workbook(path)
worksheet=myworkbook.get_sheet_by_name('Sheet1')
mycell=worksheet['B2']
mycell.value="index(B4:B72,match(B1,A4:A72,0))"
print(mycell)

Во всяком случае, я получаю и ошибку, и я не уверен, что происходит. Ouput:

DeprecationWarning: вызов устаревшей функции get_sheet_by_name (используйте wb [sheetname]). worksheet = myworkbook.get_sheet_by_name ('Sheet1')

Процесс завершен с кодом выхода 0

Для ясности, формула работает, если я просто делаю это в Excel, потому что B1 заполняется вфайл.

Я не уверен, что делает вывод. Это не выдает ошибку, но я понятия не имею, что <Cell 'Sheet1'.B2> и «Процесс завершен с кодом выхода 0» пытается мне сказать. Я ожидал вывода строки, потому что я пытаюсь индексировать в предложении.

1 Ответ

1 голос
/ 05 октября 2019

А) Для запуска формул необходимо открыть файл в Excel. Как вы утверждаете:

Насколько я понимаю, Openpyxl на самом деле не будет запускать формулы, но я могу написать в Excel и затем обновить файл для его запуска?

If by "обновить файл, чтобы запустить его «вы имеете в виду открыть файл в Excel, тогда да, Excel выполнит формулу.

B) Ошибка, которую вы получаете, на самом деле является просто предупреждением о том, что используемая вами функция не будетбыть доступным в будущих версиях Openpyxl. В этом случае в предупреждении также указывается правильный способ доступа к листу.

Вызов устаревшей функции get_sheet_by_name (Использование wb [sheetname]) [выделение добавлено]

Чтобы избежать предупреждения, замените строку на:

worksheet=myworkbook['Sheet1']

C) Когда вы добавляете формулу в ячейку, используя Openpyxl, вы должны включить символ = вначало формулы, поэтому ваша строка должна быть:

mycell.value="=index(B4:B72,match(B1,A4:A72,0))"

D) В своем выражении print вы передаете ему объект mycell, поэтому он печатает «имя» объекта<Cell 'Sheet1'.B2>. Это может быть полезно, если вы хотите убедиться, что ваша переменная mycell указывает на правильную ячейку в книге, но это не то, что вам нужно. Чтобы получить доступ к содержимому ячейки, вам нужно обратиться к .value этой ячейки. Измените свое заявление на печать так:

print(mycell.value)

Соберите все это вместе:

from openpyxl import load_workbook
path= "C:\\Users\\Me\\Documents\\Python\\File.xlsx"
myworkbook=load_workbook(path)
worksheet=myworkbook['Sheet1']
mycell=worksheet['B2']
mycell.value="=index(B4:B72,match(B1,A4:A72,0))"
print(mycell.value)
...