javascript

Excel в HTML: сервер для публикации Excel‑отчётов

  • среда, 29 июля 2026 г. в 00:00:16
https://habr.com/ru/articles/1063668/

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

Когда я работал в крупном банке, среди руководителей периодически возникала идея запретить Excel. Предполагалось, что сотрудники должны работать только в корпоративных и специализированных приложениях.

Но сотрудники всё равно продолжали им пользоваться.

Причина довольно простая: корпоративные системы хорошо решают заранее предусмотренные задачи, а Excel позволяет быстро сделать то, чего в них нет. Построить дополнительный расчёт, проверить данные, объединить несколько выгрузок или посмотреть на показатель под другим углом.

При этом у Excel есть проблема, которая особенно заметна в момент, когда результат работы нужно показать другим людям.

Проблема с публикацией Excel‑отчётов

По умолчанию результат работы сохраняется в файл.

Чтобы его открыть, получателю нужен Excel или совместимое приложение. Файл приходится отправлять по почте, загружать в облако или размещать на общем диске. Если отчёт обновился, появляется новая версия файла, а вместе с ней — обычные вопросы:

  • какой файл последний;

  • где он лежит;

  • нужно ли его скачивать;

  • можно ли открыть его с телефона;

  • почему на другом компьютере всё отображается иначе.

Excel умеет сохранять книгу в HTML, но такой экспорт подходит далеко не для всех случаев. Интерактивность получается ограниченной, структура не всегда удобной, а готовые файлы всё равно нужно вручную размещать на сервере.

Мне хотелось получить более простой процесс:

  1. загрузить файл xlsx;

  2. автоматически преобразовать его содержимое в HTML;

  3. получить набор страниц с таблицами, сводными и графиками;

  4. открыть результат по обычной ссылке в браузере.

Для этого я написал небольшой сервис — Excel HTML Converter.

Что делает сервис

Приложение работает как веб‑сервер.

Пользователь загружает Excel‑файл через браузер. Сервер сохраняет его, разбирает содержимое и формирует многостраничный HTML‑отчёт.

Каждая таблица, сводная или диаграмма становится отдельной страницей. Между страницами можно переключаться через общее бургер‑меню. Порядок страниц соответствует порядку листов в исходной книге.

После завершения обработки отчёт можно открыть по ссылке с любого устройства, имеющего доступ к серверу.

Задачи перенести весь функционал Excel в HTML не ставилось. Проект делает другое: берёт заранее подготовленную книгу и превращает её в отчёт, который удобно просматривать без установленного Excel.

 Главная страница сервиса со списком созданных отчётов.
Главная страница сервиса со списком созданных отчётов.

Как должна быть устроена книга

Полностью повторить в HTML свободную структуру Excel‑листа сложно. На одном листе могут одновременно находиться таблицы, графики, текстовые блоки, формулы, сводные и произвольно расположенные области данных.

Поэтому в конвертере действует несколько правил.

Один лист — один тип содержимого

На листе должен находиться один тип элементов:

  • обычная таблица;

  • сводная таблица;

  • диаграмма.

Смешивать на одном листе, например, обычную таблицу и диаграмму не следует.

При этом на одном листе может быть несколько сводных или несколько диаграмм. Каждый найденный объект будет преобразован в отдельную страницу отчёта.

Для обычных таблиц правило строже: одна таблица на один лист.

Конвертер воспринимает используемую область листа как единый набор данных и пока не умеет надёжно разделять несколько независимо расположенных таблиц.

Ограничения для обычных таблиц

Обычные таблицы отображаются в браузере с возможностью сортировки и фильтрации.

Все эти операции выполняются на стороне клиента, без виртуализации строк. Поэтому при большом количестве данных браузеру приходится создавать и обслуживать большое число HTML‑элементов.

По умолчанию установлен лимит в 5000 строк.

Это не жёсткое техническое ограничение: значение можно изменить в настройках. Но при значительном увеличении лимита первоначальная отрисовка, сортировка и фильтрация начинают заметно тормозить, особенно на слабых компьютерах.

Если данных существенно больше, их лучше предварительно сократить или представить в виде сводной таблицы.

Пример таблицы
Пример таблицы

Ограничения для сводных таблиц

Для сводных установлен другой лимит — 500 000 строк исходных данных.

Причина здесь не в отрисовке браузером. Компонент сводной таблицы может работать с достаточно крупными наборами данных, а скорость его отображения меняется не так резко, как у обычной HTML‑таблицы.

Основная нагрузка возникает на сервере во время чтения и разбора кэша сводной таблицы. На больших файлах этот этап может потребовать заметного количества оперативной памяти и процессорного времени.

Поэтому 500 000 строк — это значение по умолчанию, а не предельный объём. На более производительном сервере лимит можно увеличить.

 Сводная таблица после конвертации.
Сводная таблица после конвертации.

Какие сводные поддерживаются

Сейчас конвертер работает только с классическими сводными таблицами, построенными на диапазоне ячеек.

Исходные данные должны находиться:

  • в том же Excel‑файле;

  • на отдельном листе;

Листы с исходными данными можно исключить из конвертации. В этом случае они будут использоваться для построения сводной, но не появятся в HTML‑отчёте как отдельные страницы.

Сводные, использующие внешние источники, Data Model или Power Pivot, в текущую версию не входят.

Конвертер распознаёт такие объекты, пропускает их и оставляет запись в серверном логе. При этом обработка остальных элементов книги продолжается.

Поддерживаемые диаграммы

Сейчас реализована конвертация трёх типов:

  • линейный график;

  • столбчатая диаграмма;

  • круговая диаграмма.

Остальные типы я пока не добавлял. Для первой версии проекта этих трёх вариантов мне показалось достаточно.

Архитектура позволяет расширять набор диаграмм без изменения всего приложения. За обработку каждого типа отвечает отдельная пара Python‑файлов:

  • первый извлекает данные и настройки объекта из xlsx;

  • второй преобразует полученную структуру в HTML.

Поэтому новый тип диаграммы можно добавить отдельным конвертером.

 Пример диаграммы
Пример диаграммы

Что происходит на сервере

Серверная часть сервиса написана на Python. JavaScript используется в клиентской части.

Обработка файла выглядит следующим образом:

  1. На сервер загружается файл с расширением xlsx.

  2. Сервер сохраняет его на диск.

  3. Для сборки отчёта запускается отдельный процесс операционной системы.

  4. Процесс разбирает Excel‑книгу и ищет таблицы, сводные и диаграммы.

  5. Из найденных элементов собирается многостраничный HTML‑отчёт.

  6. Сервер сохраняет статус обработки и предоставляет ссылку на результат.

Для сборки используется именно отдельный процесс, а не поток.

Это сделано для изоляции. Excel‑файлы могут быть большими, содержать крупные кэши сводных или оказаться повреждёнными. Если во время обработки процесс упадёт или будет завершён операционной системой из‑за нехватки памяти, это не должно останавливать сам веб‑сервер и обработку других отчётов.

Рядом с процессом работает лёгкий поток‑наблюдатель. Он проверяет состояние дочернего процесса.

Без такого наблюдателя возможна неприятная ситуация: операционная система завершила процесс, а в интерфейсе отчёт навсегда остался в статусе «обрабатывается».

Наблюдатель обнаруживает, что процесс завершился, и переводит отчёт в состояние ошибки.

Книга разбирается один раз: за один проход конвертер находит таблицы, сводные и диаграммы, после чего собирает из них страницы отчёта.

Быстрый запуск

Чтобы быстро посмотреть, как работает сервис, понадобятся Python и Node.js.

Node.js в данном случае используется для установки пакета через npm. Сам сервер запускается на Python.

Установка пакета и запуск сервера:

npm install excel-html-converter
python node_modules/excel-html-converter/server/server.py

После запуска сервис можно открыть в браузере на компьютере, где он установлен.

Такой способ подходит, чтобы быстро проверить работу приложения, но для постоянного использования он не очень удобен. Полная пошаговая инструкция по развёртыванию сервиса приведена в описании к видео.

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

Репозиторий на GitHub:

https://github.com/AlexKorole/excel_html_converter

Пакет в npm:

https://www.npmjs.com/package/excel‑html‑converter

Демонстрация и инструкция по установке

В видео показаны установка, запуск сервера, загрузка Excel‑файла и результат конвертации:

https://youtu.be/KmjPOCm9-xI

В описании к видео находится пошаговая инструкция по развёртыванию сервиса для постоянной работы.

Для каких задач это может пригодиться

Сервис может пригодиться, когда готовый Excel‑отчёт нужно сделать доступным через браузер. С его помощью можно:

  • публиковать внутренние отчёты в локальной сети;

  • показывать таблицы пользователям без установленного Excel;

  • размещать учебные примеры;

  • публиковать небольшие аналитические отчёты;

  • просматривать сводные и диаграммы с телефона;

  • отправлять ссылку вместо очередной версии файла.

При этом нужно учитывать, что сервис предназначен именно для просмотра готового отчёта. Изменять формулы, редактировать ячейки и перестраивать саму Excel‑книгу через браузер он не позволяет.