И тут приходит идея либо распаковать xlsx, и копаться во внутренностях формата, либо взять какой-то сторонний инструмент и использовать его.
В данной статье мы попробуем использовать python и его пакет openpyxl для решения данной задачи.
Нам потребуется:
1. установить python (https://www.python.org/)
2. установить пакет openpyxl (pip install openpyxl)
3. скрипт (reform.py), который при нахождении в ячейке знака "=" будет активировать формулу
from openpyxl import load_workbook
from sys import argv
script, inputFile, outputFile = argv
wookbook = load_workbook(inputFile)
for worksheetName in wookbook.sheetnames:
worksheet = wookbook[worksheetName]
for i in range(0, worksheet.max_row):
for col in worksheet.iter_cols(1, worksheet.max_column):
if str(col[i].value)[0] == '=':
col[i].value = col[i].value
wookbook.save(outputFile)
Например, мы сформировали Табличный документ, где в ячейках прописали формулы, и сохранили его (input.xlsx), но при открытии для Excel это всего лишь текст
Чтобы текст в ячейке превратился в формулу, нужно запустить скрипт
python reform.py input.xlsx output.xlsx
после в файле output.xlsx все формулы будут работать
Тем самым мы решили проблемы по выгрузке файла Excel с формулами без Windows машин.
Пакет openpyxl очень богат, и с его помощь можно, например, изменять формат ячейки (популярный пример это формат Даты, чтобы при отборе было дерево)
Нюансы при использовании:
1. использовать формулы в английском формате, не только ключевое слово, но и знаки разделители (например в русских формулах используется ";", в английских ",")
2. при windows окружении при использовании "ЗапуститьПриложение" использовать полный путь до python.exe. (при использовании Linux можно просто python или python3, проверяйте как он в вашей системе называется)
Пример реализован на платформе 1С:Предприятие 8.3 (8.3.22.2411).