Python добавить формулу столбца таблицы Excel

Мы хотим заполнить таблицу Excel через Python. Простой пример таблицы приведен на рисунке ниже. Должны быть заполнены только столбцы «название» и «значение». «Вычисления» столбца содержат формулу столбца, и впредь Excel должен сам вычислять значения на основе более раннего заполнения.

OpenPyXL казался пакетом для этого, но я не могу заставить это работать. Я пробовал следующее.

похожий вопрос был спросил, но не ответил.

введите здесь описание изображения

Способ 1. Расширение таблицы одной строкой

Идея этого метода состоит в том, чтобы расширить таблицу и заставить Excel расширить формулу. См. фрагмент ниже. При открытии файла Excel в таблице действительно есть дополнительная строка. Однако формула в столбце «расчеты» не была расширена.

from openpyxl import load_workbook
filename = "Book1_test.xlsx"
wb = load_workbook(filename=filename)
ws = wb['tabblad1']
tbl = ws.tables['Calculations']
tbl.ref = "C4:E7"  # Adding one row by incrementing 6 to 7
ws['C7'].value = "gamma"
ws['D7'].value = 4.0
wb.save(filename=filename)

Способ 2. Расширение таблицы и использование переводчика

Идея этого метода состоит в том, чтобы изменить метод OpenPyXL Translator на таблицу -Применение. См. фрагмент ниже. При открытии файла Excel возвращалась ошибка «#ССЫЛКА!» а формула столбца была «=#ССЫЛКА!^2». Поскольку это REF-ошибка, я изменил формулу на «=$D$7^2».

tbl.ref = "C4:E7"
ws['C7'].value = "gamma"
ws['D7'].value = 4.0
ws['E7'] = Translator('=[@value]^2', origin="E5").translate_formula("E7")
wb.save(filename=filename)

Способ 3. Расширение таблицы и использование свойства calculateColumnFormula

Идея этого метода заключается в повторном применении формулы столбца после расширения таблицы. См. фрагмент ниже. Как и в случае с методом 1, формула не была расширена.

column_formula = tbl.tableColumns[2].calculatedColumnFormula
tbl.ref = "C4:E7"
tbl.tableColumns[2].calculatedColumnFormula = column_formula

Альтернатива: вообще не использовать таблицу

Использование переводчика OpenPyXL без таблицы Excel работает. Но это не наше предпочтение.


person Chris    schedule 21.11.2020    source источник