Сегодня я опишу довольно тривиальную, но ни где не освященную тему экспорт из страницы данных в Excel.

Вы глубоко заблуждаетесь.


SheetJS, но боже мой как там запущено все. Если с форматированием еще можно справится, то стили — это головная боль.

Потому что целью является сконструировать настоящий XLS.


Оформите саму сетку в таблице с помощью атрибутов colspan, rowspan, добавьте стили и после этого вызывайте генерацию файла.

И в результате получим несовместимый с альтернативными программами документ. В LibreOffice, если повезёт, хотя бы сетка ячеек сохранится. В Numbers документ откроется, но без контента. А ещё есть всякие мобильные офисы, в том числе GDrive Viewer. Вам-то может быть всё равно, а клиенты будут жутко недовольны.

20+ не работающих форков меня не впечатлили. Впрочем тема xls благостна для холиваров.
Сегодня я опишу довольно тривиальную, но ни где не освященную тему

<humor>Освящать что бы то ни было — это прерогатива церкви. </humor>
Там после «ни где» можно не читать
процесс не описан ни где в полной мере и так приступим
Вообще об ошибках/опечатках принято в личку писать, но тут автор постарался на славу: вся статья является примером абсолютной безграмотности. Но главное в заключении:
Если понравилась статья, могу ответить в комменты после получения приглашения
Нет.
1. Хабр — это не Gist, для статьи недостаточно выложить кусок кода со словами «ну вот, пользуйтесь». Нужны комменты, объяснение принципа работы, пример.

2. Я бы подумал, что русский язык для автора не родной. Особенно плохо с пунктуацией. Перед публикацией статью желательно прогонять хотя бы через Word, а еще лучше — дать на вычитку знакомым.
А модерации разве тут нет?
Судя по таким вот
типа статьям
видимо она прекратила свое существование.
Вы поклонник написания 100% неповторяемого кода?

Я поклонник написания кода.

Boomburum, копипаста, не являющаяся переводом, на хабре уже разрешена?
Код подходил под задачу, был добавлен код сохранения с именем файла, написаны заметки по оформлению. Или вы «Правообладатель»?

PS и этот кусок кода отлично подходил для демонстрации принципа работы.
habrahabr.ru/info/help/rules
Заниматься копипастом и кросспостом
Мы всячески приветствуем интересный и полезный сообществу контент, но только если он оригинальный. Поэтому не следует копипастить на «Хабр» тексты, которые ранее были опубликованы на других ресурсах (даже если вы — автор такого текста).
Немного оффтоп: xls — зло. Еще большее зло, что эти форматы (xls, doc и другие) до сих пор стандарт де-факто много где. Старый, проприентарный, бинарный. MS Office Open XML (docx, xlsx, ...) и OpenDocument поддерживаются куда лучше большим количеством современных офисных пакетов.
Зло он конечно зло, но легаси код и миллионы установок играют свою роль.
У меня стоит и MS и Libre я чаще использую MS, и только в одном случае использую Calc, когда нужно работать с utf-8 в CSV.
Отдельный разговор бухгалтерия и всякие контролирующие органы, там засилье MS

А TableExport вы смотрели? Возможно у меня чересчур тривиальные случаи, но с особыми проблемами не сталкивался.
Отличная штука, надо попробовать
А вот мне пришлось выгружать данные на стороне ноды, со стилями
в итоге, забил на стили и просто выгружаю, с модулем xlsx
Правда при этом сервер потихоньку течет, не знаю почему…
Хотелось бы услышать, генерировал эксельку с:
1) форматированием — даже банальный перенос строки в ячейке
2) комментарии к ячейкам
Если имеется Windows-машина с установленным Офисом, то на ней можно организовать простенький http-сервис, хоть на Node.js, хоть на Go, принимающий на вход данные и, посредством хоть Windows Script Host, дергать интерфейсы Офиса и выдавать уже готовое в любом нужном формате.

Ну зачем windows. На vds можно использовать какой нибудь LibreOffice, который умеет headless.

к сожалению, у нас только линукс серверы
На сервере как раз намного проще. От предложенного Libre до вполне зрелых решений на PHP и Яве. В случае с сервером есть и еще одно преимущество у вас уже сформирован набор данных, а как его отдать клиенту это вопрос 10й.

К этим пунктом хотелось бы приплюсовать размещение картинок в генерируемом файле.

У меня эта задача не стояла, но все зависит от движка рендеринга Microsoft Excel. Скорее всего он поймет рисунки встроенные в файл.
developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

например
<img src = 'data:image/gif;base64,R0lGODlhCwALAIAAAAAA3pn/ZiH5'>
Как-то приходилось делать подобное для выгрузки из ExtJS в Excel. Сразу отмечу, что к JS/PHP/HTML я имею самое поверхностное отношение:
// Функция экспорта в Excel с панели табуляции
function storeToExcel() {
    var aTab = tabPanel.getActiveTab( );
    var aStore = aTab.getStore();  
    Ext.Ajax.request({
        url: 'exportToExcel.php',
        jsonData: Ext.encode(Ext.pluck(aStore.data.items, 'data')),
        success : function(response) {
            if(response.responseText) {
                window.open("export/" + response.responseText);
            } else {
                Ext.Msg.alert('Уведомление', 'Ошибка экспорта');
            }
        }
    });
}


А сам exportToExcel.php был максимально простой и использовал готовую библиотеку PHPExcel.
Возможно кому-то такой способ подойдет.
По моему мнению, это наиболее правильный путь. Серверные компоненты отлично справляются. Но это особенности именно моего проекта.
Съехали с SheetJS на exceljs.
Возможностей стилизации побольше.
Только полноправные пользователи могут оставлять комментарии.
Войдите, пожалуйста.