Мы хотим заполнить таблицу 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 работает. Но это не наше предпочтение.