...

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

Тема в разделе "Данные: импорт, экспорт, миграция", создана пользователем ksannikov, 9 фев 2026.

  1. ksannikov

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

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

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


    Код:
    
    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