преобразуйте формулу Excel в ячейке для работы в скрипте Python

#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.