Розробка онлайн-редактора таблиць

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка онлайн-редактора таблиць
Складна
від 2 тижнів до 3 місяців
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка онлайн-редактора таблиць

Онлайн-редактор таблиць — найскладніший клас веб-додатків. Завдання включає: віртуалізацію великих таблиць, формульний рушій, спільне редагування з розвязанням конфліктів, імпорт/експорт XLSX. Повноцінний аналог Google Sheets потребує багаторічної розробки; реалістичні цілі — вбудований редактор для конкретного бізнес-кейса або спеціалізована таблиця з обмеженим набором функцій.

Віртуалізація UI

Таблиця з 100,000 рядків не може рендерити всі DOM-елементи одночасно. Віртуалізація — рендер тільки видимих рядків + невеликий буфер:

  • TanStack Virtual (раніше react-virtual) — headless хук для віртуалізації
  • AG Grid — feature-rich комерційна сітка з віртуалізацією, формулами, експортом
  • Handsontable — близько до Excel за функціями, MIT або комерційна ліцензія

Реалізація віртуалізації рядків з TanStack Virtual:

const rowVirtualizer = useVirtualizer({
  count: rows.length,
  getScrollElement: () => parentRef.current,
  estimateSize: () => 24, // висота рядка в px
  overscan: 10,
});

return (
  <div style={{ height: rowVirtualizer.getTotalSize() }}>
    {rowVirtualizer.getVirtualItems().map(virtualRow => (
      <Row key={virtualRow.index} row={rows[virtualRow.index]}
        style={{ transform: `translateY(${virtualRow.start}px)` }} />
    ))}
  </div>
);

Формульний рушій

Формульний рушій — парсинг виразів вида =SUM(A1:B10) * C5 + IF(D1>0, E1, 0).

HyperFormula (Handsontable team) — open-source рушій з підтримкою 400+ формул, XLSX-сумісний. Написаний на TypeScript, працює в браузері та Node.js:

import HyperFormula from 'hyperformula';
const hf = HyperFormula.buildFromArray([
  ['=SUM(B1:B3)', 10, 20, 30],
  [1, 2, 3],
]);
console.log(hf.getCellValue({ row: 0, col: 0, sheet: 0 })); // 6

Dependency tracking: при зміні ячейки рушій перераховує тільки залежні ячейки (lazy evaluation за графом залежностей).

Спільне редагування

OT (Operational Transformation) або CRDT для розвязання конфліктів при одночасному редагуванні:

Yjs — CRDT-бібліотека з підтримкою shared types. Для таблиць: Y.Map для ячеєк.

const ydoc = new Y.Doc();
const cells = ydoc.getMap('cells'); // key: "A1", value: ячейка

// Провайдер для синхронізації
const provider = new WebsocketProvider('ws://server', 'spreadsheet-123', ydoc);

// Оновлення ячейки
cells.set('A1', { value: 100, formula: null });

Конфлікт при одночасній зміні однієї ячейки двома користувачами в CRDT: останнє оновлення (LWW — Last Write Wins) за timestamp lamport clock.

Історія змін та undo/redo

Undo/redo — через стек операцій. Кожна зміна (включаючи формули) записується як reversible operation. Collaborative undo складніше: відміна своїх змін, не чужих.

Типи даних та форматування

Ячейка може містити: рядок, число, дату, boolean, формулу. Форматування: шрифт, колір фону/тексту, числовий формат (%, дата, валюта), вирівнювання, межі.

Числові формати зберігаються як рядки формату: #,##0.00, DD.MM.YYYY, 0%.

Імпорт/Експорт XLSX

  • SheetJS (xlsx) — повна підтримка XLSX, XLS, CSV. Читає та пише файли. Працює в браузері (FileReader) та Node.js.
  • ExcelJS — створення XLSX з форматуванням, зображеннями, формулами.

При імпорті XLSX: витяг ячеєк → нормалізація у внутрішній формат. Формули зберігаються як рядки, обчислюються через HyperFormula.

Часові рамки

Спеціалізована таблиця (конкретний шаблон, 100-1000 рядків, базові формули, без спільного редагування): 2–3 місяці. Повноцінний редактор з віртуалізацією, спільним редагуванням, імпортом XLSX та 200+ формулами: 6–10 місяців.