#python #excel #openpyxl #converters #pycel
Вопрос:
Я пытался преобразовать формулы в книге Excel в эквивалентные функции Python или операторы в скрипте Python.
На моем рабочем месте у нас есть старые рабочие книги Excel, которые мы используем для расчетов в инженерных процессах (например, при проектировании бетонных конструкций). Эти вычисления включают в себя множество формул и ссылок между формулами. Я хочу преобразовать формулы в этих книгах в «эквивалентные» функции Python, в результате чего эти книги Excel затем заменяются сценариями Python (по причинам, касающимся ремонтопригодности этих технических документов и проверки рабочего процесса).
Чтобы продемонстрировать принцип на базовом примере.
Если есть книга Excel с одним листом (имя = Лист1)
value in cell A1 = 2
value in cell A2 = 3
value in cell A3 = '=A1 A2' = 5
Эта функция Python будет желаемым результатом:
def A3(A1,A2):
return A1 A2
В качестве альтернативы можно использовать глобальную переменную
A3 = 0
def A3(A1,A3):
A3 = A1 A3
Еще один более сложный пример, включающий условный оператор:
Рабочая книга Excel с двумя листами («Лист1» и «Лист2»)
Sheet1!A1 = 2
Sheet1!A2 = 3
Sheet1!A3 = False
Sheet2!A1 = '=IF(Sheet1!A3 == True; Sheet1!A1 Sheet1!A2; Sheet1!A1*Sheet1!2)' = 6
В Python стало бы (или что-то подобное):
def Sheet2!A1(Sheet1!A1,Sheet1!A2):
if Sheet!A3 == True:
return Sheet1!A1 Sheet1!A2
else:
return Sheet1!A1 * Sheet1!A2
Я пробовал использовать openpyxl (для чтения книг) в сочетании с формулами (модуль) и pycel, но я не могу понять, как получить такое преобразование.
Если я правильно понимаю, пакет формул и пакет pycel могут идентифицировать и преобразовывать функции Excel (в Python, верно?). Или, может быть, они просто делают это во время выполнения?
В частности, я хочу знать, как, по сути, скомпилировать формулы Excel в функции Python.
Общий вопрос: есть ли способ автоматизировать преобразование книг Excel в эквивалентные скрипты Python?
Ответ №1:
Pycel можно использовать для компиляции xlsx-файла в код Python, но, возможно, не так, как вы надеетесь.
Используя ваш пример в качестве example.xlsx, выполнив следующий код:
from pycel import ExcelCompiler
excel_compiler = ExcelCompiler('example.xlsx')
excel_compiler.to_file(file_types='yaml')
приведет к созданию этого файла yaml:
cycles: false
excel_hash: b99b0d1174e4bfaceddeeb70bde09c9f
cell_map:
Sheet1!A1: 2
Sheet1!A2: 3
Sheet1!A3: false
Sheet2!A1: =if_(_C_("Sheet1!A3") == True, _C_("Sheet1!A1") _C_("Sheet1!A2"), _C_("Sheet1!A1") * _C_("Sheet1!A2"))
filename: example.xlsx
Значения словаря для cell_map
являются кодом Python и фактически выполняются pycel при вычислении ячейки. Однако, поскольку модель выполнения кода Excel несколько отличается от Python, во время этого выполнения происходят некоторые незначительные чудеса.
Отказ от ответственности: я являюсь сопровождающим компании pycel
Комментарии:
1. Это уже довольно полезно, гораздо ближе к желаемому результату. Эти результаты в сочетании с простым поиском и заменой (или преобразованием этих результатов с использованием регулярных выражений в отдельной программе) могут быть удовлетворительным рабочим процессом для преобразования книг Excel в Python.