Генерация электронной таблицы в JS
Часто бывают ситуации, когда JS приложение должно вывести какие-то данные, с которыми затем пользователю будет удобно работать в Excel (ну или OpenOffice). Это легко реализовать, путём генерации файла прямо в JS коде. Только для этого стоит использовать не обычный формат XLS/XLSX — эти форматы слишком сложны в реализации.
Гораздо проще сгенерировать файл в формате CSV. Этот формат предельно простой. Каждая строка в файле будет строкой в таблице. При этом значения полей должны быть перечислены через запятую.
Пример файла
Id статьи, Число просмотров
323, 156
324, 489
325, 387При открытии такого файла в Excel или OpenOffice он будет отображаться, как обычная таблица.
Генерация на JS
Допустим, изначально у нас есть эти данные в виде объектов:
const viewsData = [
{
articleId: 323,
views: 489
},
{
articleId: 324,
views: 156
},
{
articleId: 325,
views: 387
}
]Для преобразования этих данных в формат CSV можно использовать функцию map:
const csvContent = viewsData.map((dataItem) => {
return `${dataItem.articleId},${dataItem.views}`
}).join('\n')Теперь добавим заголовки колонок
const csvFullContent = `Id статьи, Число просмотров,\n${csvContent}`Передаём пользователю
Для того, чтобы пользователь мог скачать эту строку, как файл, создадим на странице тег <a>, где в качестве href укажем data-url:
const link = document.createElement('a')
link.href = `data:text/csv;charset=utf-8,${csvFullContent}`
link.textContent = 'Загрузить таблицу'
document.querySelector('body').appendChild(link)