Покажу пример реализации кастомного экспорта данных в эксель при помощи сторонней библиотеки.
Все подробности в ролике, а ниже код для функции экспорта:
Код:
import XLSX from "xlsx.bundle.js"
async function exportUsers(): Promise<void> {
try {
const users = await System.users.search().where(f => f.__deletedAt.eq(null)).size(10000).all()
const rows = users.map(user => {
let data = {} as any
data['ФИО'] = user.data.__name;
data['Эл.почта'] = user.data.email
data['Сотовый тел.'] = user.data.mobilePhone?.tel ?? ''
data['Рабочий тел.'] = user.data.workPhone?.tel ?? ''
data['Дата рождения'] = user.data.birthDate?.format('DD.MM.YYYY') ?? ''
data['Дата приема на работу'] = user.data.hireDate?.format('DD.MM.YYYY') ?? ''
data['Учетные записи'] = user.data.accounts?.map(f => `${f.type}: ${f.login}`) ?? ''
return data
});
const worksheet = XLSX.utils.json_to_sheet(rows);
// Определяем нужную ширину колонок
worksheet['!cols'] = [
{ wch: 30 },
{ wch: 30 },
{ wch: 18 },
{ wch: 18 },
{ wch: 16 },
{ wch: 30 },
{ wch: 40 },
];
// Делаем заголовки жирными
const range = XLSX.utils.decode_range(worksheet['!ref']!);
for (let col = range.s.c; col <= range.e.c; col++) {
const address = XLSX.utils.encode_cell({ r: 0, c: col });
const cell = worksheet[address];
if (!cell) continue;
cell.s = {
font: { bold: true },
alignment: { horizontal: "center" }
};
}
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Пользователи');
XLSX.writeFile(workbook, `Экспорт пользователей от ${new Datetime().format()}.xlsx`);
} catch (e) {
throw new Error(`Ошибка формирования файла экспорта: ${e.message}`)
}
}
P.s. В комментариях к видео найдете файл используемой библиотеки
Еще больше полезной информации в ТГ канале WhatDaELMA365