Розробка власного двигуна для обробки робочих книг вимагає глибокого розуміння того, як керувати даними, формулами і їх збереженням. Однією з ключових особливостей такого двигуна є здатність обробляти конкатенацію рядків у формулах, використовуючи символ ‘&’, а також ефективне збереження та завантаження робочих книг у форматі JSON. Розглянемо детальніше, як можна вирішити ці завдання, використовуючи власну систему обробки формул та збереження даних.
Для початку, розглянемо механізм обробки конкатенації рядків. Ключовим елементом є правильне інтерпретування формул, що містять символ ‘&’. Використання парсера на базі Lark дозволяє нам визначити граматику для розпізнавання таких виразів. Нижче представлено приклад граматики для розбору виразів конкатенації:
1 |
?concat_expr : (concat_expr "&")? base |
Такий підхід дозволяє рекурсивно обробляти вирази, розділені символом ‘&’, забезпечуючи можливість об’єднання рядків або значень комірок. Однак, важливо не лише розпізнати формулу, але й коректно обчислити її. Для цього потрібно організувати обробку кожного елемента виразу, що може вимагати рекурсивного виклику обробки комірок для забезпечення обчислення вкладених виразів.
Перехід до формату JSON для збереження та завантаження робочих книг відкриває широкі можливості для обміну даними та їх інтеграції з іншими системами. Основним завданням є конвертація структури даних робочої книги в JSON формат та навпаки. При збереженні важливо забезпечити, щоб кожна робоча книга, її листи, комірки та вміст комірок були належним чином представлені в JSON форматі:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "sheets": [ { "name": "Sheet1", "cell-contents": { "A1": "value1", "B1": "=A1+1", ... } }, ... ] } |
При зав