...

Кастомный экспорт в Excel

Тема в разделе "Примеры решений и дополнительных модулей", создана пользователем ksannikov, 9 фев 2026 в 10:01.

  1. ksannikov

    ksannikov Активный участник

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

    Все подробности в ролике, а ниже код для функции экспорта:


    Код:
    
    import XLSX from "xlsx.bundle.js"
    async function exportUsers(): Promise<void> {
        try {
            const 
    users await System.users.search().where(=> 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.type}${f.login}`) ?? ''
                
    return data
            
    });

            const 
    worksheet XLSX.utils.json_to_sheet(rows);

            
    // Определяем нужную ширину колонок
            
    worksheet['!cols'] = [
                { 
    wch30 },
                { 
    wch30 },
                { 
    wch18 },
                { 
    wch18 },
                { 
    wch16 },
                { 
    wch30 },
                { 
    wch40 },
            ];

            
    // Делаем заголовки жирными
            
    const range XLSX.utils.decode_range(worksheet['!ref']!);
            for (
    let col range.s.ccol <= range.e.ccol++) {
                const 
    address XLSX.utils.encode_cell({ r0ccol });

                const 
    cell worksheet[address];
                if (!
    cell) continue;

                
    cell.= {
                    
    font: { boldtrue },
                    
    alignment: { horizontal"center" }
                };
            }

            const 
    workbook XLSX.utils.book_new();
            
    XLSX.utils.book_append_sheet(workbookworksheet'Пользователи');
            
    XLSX.writeFile(workbook, `Экспорт пользователей от ${new Datetime().format()}.xlsx`);
        } catch (
    e) {
            throw new 
    Error(`Ошибка формирования файла экспорта: ${e.message}`)
        }
    }
    P.s. В комментариях к видео найдете файл используемой библиотеки

    Еще больше полезной информации в ТГ канале WhatDaELMA365