Создать онлайн-редактор таблиц, который справляется с десятками тысяч строк и сложными формулами, — нетривиальная инженерная задача. Готовые коробочные решения не дают гибкости: встроить их в CRM, добавить свои функции или адаптировать под специфику бизнеса почти невозможно. Мы строим систему с нуля под ваш сценарий — с виртуализацией, формульным движком и совместной работой. Экономия на лицензиях по сравнению с AG Grid Enterprise может достигать 40%, а средний период окупаемости — 6–9 месяцев. Оценим проект за 1 день.
Как работает виртуализация больших таблиц?
Таблица со 100 000 строк не может рендерить все DOM-элементы — браузер зависнет. Решение — виртуализация: рендер только видимых строк с буфером. Используем headless-библиотеку TanStack Virtual для полного контроля рендеринга или AG Grid с готовой виртуализацией и встроенными формулами. В проектах с высокой нагрузкой комбинируем AG Grid с собственным формульным движком — это даёт стабильные 60 FPS даже на мобильных устройствах.
Пример реализации виртуализации строк с TanStack Virtual:
const rowVirtualizer = useVirtualizer({ count: rows.length, getScrollElement: () => parentRef.current, estimateSize: () => 24, overscan: 10, }); Для сравнения возможностей популярных библиотек:
| Библиотека | Виртуализация | Формулы | Совместная работа | Лицензия |
|---|---|---|---|---|
| TanStack Virtual | Да (headless) | Нет | Нет | MIT |
| AG Grid | Да | Встроен. | Enterprise | Коммерческая |
| Handsontable | Да | HyperFormula | Через внешние инструменты | MIT / Commercial |
Формульный движок: от парсинга до пересчёта
Формулы вида =SUM(A1:B10) * C5 + IF(D1>0, E1, 0) требуют парсера и графа зависимостей. Мы используем HyperFormula — open-source движок на TypeScript с поддержкой 400+ формул, совместимых с Excel. Он работает и в браузере, и на сервере, что позволяет вычислять тяжёлые формулы асинхронно. Dependency tracking в HyperFormula lazy: при изменении одной ячейки пересчитывается только минимальный набор зависимых.
Почему CRDT лучше OT для совместного редактирования?
Operational Transformation (OT) требует центрального сервера и последовательной обработки — это создаёт задержки и сложности при offline. CRDT (Conflict-free Replicated Data Types) позволяют каждому клиенту работать автономно, а потом сливать изменения без конфликтов. В таблицах используем Yjs с shared types: Y.Map для ячеек. Подробнее о CRDT можно прочитать в Wikipedia.
const ydoc = new Y.Doc(); const cells = ydoc.getMap('cells'); const provider = new WebsocketProvider('ws://server', 'spreadsheet-123', ydoc); При одновременном изменении одной ячейки двумя пользователями применяется Last Write Wins (LWW) на основе логических часов — данные не теряются.
Как добавить кастомную формулу в редактор?
- Создайте функцию-реализацию на TypeScript, например:
const CUSTOM_FN = (a: number, b: number) => a * b; - Зарегистрируйте её в HyperFormula через
HyperFormula.registerFunctionPlugin(MyPlugin); - В интерфейсе добавьте кнопку для вставки формулы, которая вызывает
hf.setCellFormula(row, col, '=CUSTOM_FN(A1, B2)'); - При пересчёте движок автоматически вызовет вашу функцию. Весь процесс занимает около 2 часов.
История изменений и undo/redo
Undo/redo реализуем через стек операций. Каждое изменение (вставка текста, изменение формулы, форматирование) записывается как reversible-команда. Для совместного редактирования важно отличать свои действия от чужих — мы храним userId в метаданных. При 50+ одновременных пользователях время отклика остаётся ниже 50 мс.
Импорт / Экспорт XLSX: что внутри
- SheetJS (xlsx) — читает и пишет XLSX, XLS, CSV. Под капотом парсит XML-архив, извлекает ячейки, форматирование, формулы (записывает их как строки).
- ExcelJS — создаёт XLSX с расширенным форматированием: объединение ячеек, условное форматирование, изображения.
При импорте формулы из XLSX сохраняются в текстовом виде и передаются в HyperFormula для вычисления при первом показе.
Процесс работы: этапы и сроки
| Этап | Длительность | Результат |
|---|---|---|
| Аналитика и прототип | 2–4 недели | ТЗ, макет, выбор стека |
| Проектирование архитектуры | 1–2 недели | ERD, API-спецификация, карта компонентов |
| Разработка ядра (виртуализация, формулы) | 4–8 недель | Работающий табличный движок |
| Интерфейс и интеграция | 4–8 недель | UI, импорт/экспорт, коллаборация |
| Тестирование и деплой | 2–4 недели | Регресс, нагрузочное тестирование, CI/CD |
Что входит в работу
Мы предоставляем:
- Исходный код редактора на TypeScript (React/Angular/Vue по выбору)
- Документация API для интеграции
- Инструкция по деплою (Docker, Nginx)
- Обучение команды (до 5 часов)
- Поддержка на этапе внедрения (2 недели)
Средний срок создания специализированной таблицы с базовым функционалом — 2–3 месяца. Полноценный редактор с совместной работой, импортом XLSX и 200+ формулами — 6–10 месяцев. Точную оценку дадим после анализа вашего кейса.
Типичные ошибки при разработке онлайн-редактора таблиц
- Недооценка виртуализации: попытка рендерить все строки приводит к падению производительности.
- Использование OT без резервирования: при отключении клиента теряются правки — CRDT решает эту проблему.
- Игнорирование форматного слоя: при импорте XLSX теряется форматирование, что снижает удобство.
Свяжитесь с нами для консультации и получите оценку проекта за 1 день. Закажите разработку онлайн-редактора таблиц под ваши задачи — мы поможем реализовать решение с нуля.







