Поскольку я не мог найти решение в PHP и предыдущих решениях на C ++ ( Есть ли библиотека PHP для анализа / редактирования XLSM (Excel с макросами)? ) где усложнять для Я нашел решение с python, я хочу поделиться.
Моя среда - Ubuntu 16.04, у меня установлено Python. Я установил https://editpyxl.readthedocs.io/en/latest/
Я поместил небольшой сценарий в тот же каталог, что и сценарий PHP, который я вызываю с помощью PHP:
from editpyxl import Workbook
import sys
import logging
logging.basicConfig()
if len(sys.argv) != 4:
print("Three arguments accepted, got " + (str(len(sys.argv) -1)))
print("Argument 1: Sheet name, Argument 2: Cell Identifier, Argument 3: New Value")
sys.exit();
wb = Workbook()
source_filename = r'OriginalFile.xlsm'
wb.open(source_filename)
ws = wb[sys.argv[1]]
ws.cell(sys.argv[2]).value = sys.argv[3]
destination_filename = "NewFile.xlsm"
wb.save(destination_filename)
wb.close()
В PHP я вызываю его через
exec('python excel.py "SheetName" "CellName" "NewValue"')
Кажется, это обходной путь, но он работает (особенно на Linux) и его очень легко реализовать. Однако у этого решения есть ограничение по производительности. Сценарий python читает, изменяет значение и сохраняет файл excel в каждой среде выполнения. Если вам нужно изменить только некоторые значения, это может не быть проблемой, но если вы планируете редактировать файлы Excel большего размера с большим количеством ячеек для редактирования, вы можете написать полный код, который редактирует xlsm в python.
Этот код, однако, у меня работает. Он редактирует Excel, и все формулы / расчеты внутри остаются в порядке, макросы остаются нетронутыми.