В период моей работы фронтенд-разработчиком в компании, была поставлена задача создать внутренний веб-аналог Excel, чтобы пользователи перенесли всю работу в веб-приложение.

Первым шагом стал поиск подходящей JavaScript-библиотеки для табличного редактора. Выбор пал на Hansontable за многофункциональность, простоту подключения и за легкую кастомизацию. В общем, на работе задача была выполнена, приложение отвечающее потребностям узкого круга пользователей было создано.

Но мой личный интерес был удовлетворен не полностью, и я решил написать более универсальное приложение до известных пределов - альтернативу Google таблиц и Excel, где будет самый важный функционал из Google таблиц и Excel: это формулы, условное форматирование, построение графиков и тд. К такому приложению можно будет дописать любой бэкенд. Также такое приложение можно будет кастомно интегрировать в другое приложение, где необходим функциональный редактор наподобие Google таблиц и Excel.

В качестве стека я выбрал Vue3 и TypeScript, а в качестве табличного редактора – проверенный Handsontable.

Работа с формулами

В качестве работы с формулами взял js библиотеку HyperFormula, которая повторяет более 400 формул, доступных в Excel и Google Таблицах. Чтобы предотвратить зависание приложения при подсчете тысяч строк, я применил распределение вычислений по worker'ам. При этом основной поток мгновенно рассчитывает только 50-60 строк, отображаемых в текущем видимом окне.

Условное форматирование

Функционал условного форматирования был вдохновлен Google Таблицами, но с некоторыми адаптациями. Поскольку столбцы имеют "строгую типизацию", выбор правил форматирования ограничен теми, которые соответствуют типу данных столбца. Благодаря виртуальному скроллингу Handsontable, отрисовка происходит только для видимых строк плюс примерно 10 строк вверх и вниз, что позволяет избежать зависания приложения."

Графики

Для работы с графиками я использовал библиотеку Chart.js. Функционал построения диаграмм был также вдохновлен Google Таблицами, но с некоторыми изменениями. Диапазон данных по горизонтали определяется добавлением столбцов в окно с меткой "использовать данные столбцов...", а по вертикали – выделением строк в таблице.

Комментарии (6)


  1. Surrogate
    27.08.2025 11:11

    Респект!


  1. prishelec
    27.08.2025 11:11

    Ну молодец! Дальнейших вам успехов!


  1. pda0
    27.08.2025 11:11

    А как сами данные хранятся?


  1. huder
    27.08.2025 11:11

    А в чём полезность или вообще идея статьи? Ссылки на гитхаб нет, описания каких-то деталей кроме того, что вы взяли самые популярные библиотеки для графиков, таблицы и формул и собрали вместе, тоже. Ну типа, окей и что?


    1. grvelvet
      27.08.2025 11:11

      Это внутренний инструмент, странно было бы ждать ссылку на гитхаб.


  1. Dhwtj
    27.08.2025 11:11

    Тоже присматривался к HyperFormula, но сделал на бэке на epplus

    Опубликуете код или просто поговорить пришли?

    Сколько времени заняло?

    Могу прилепить бэк с сохранение в БД, многопользовательским режимом и многопоточностью. Будет Excel / Google sheets on premise

    Вот чтение и запись файлов будет посложнее сделать из-за разного формата формул