Загрузка данных


<script>

async function exportToExcel(){

    const workbook = new ExcelJS.Workbook();

    const sheet = workbook.addWorksheet("Карта практики");



    // =========================
    // Размеры колонок
    // =========================

    sheet.getColumn(1).width = 5;
    sheet.getColumn(2).width = 35;

    for(let i = 3; i <= 33; i++){

        sheet.getColumn(i).width = 4;

    }



    // =========================
    // Стили
    // =========================

    const borderStyle = {
        top: {style:'thin'},
        left: {style:'thin'},
        bottom: {style:'thin'},
        right: {style:'thin'}
    };



    // =========================
    // Верхняя шапка
    // =========================

    sheet.mergeCells('B2:AG3');

    const orgCell = sheet.getCell('B2');

    orgCell.value = 'ИП или ООО';

    orgCell.alignment = {
        horizontal:'center',
        vertical:'middle'
    };

    orgCell.font = {
        bold:true,
        size:14
    };

    orgCell.fill = {
        type:'pattern',
        pattern:'solid',
        fgColor:{argb:'FFF200'}
    };

    orgCell.border = borderStyle;



    // =========================
    // Колледж
    // =========================

    sheet.mergeCells('B5:AG5');

    const college = sheet.getCell('B5');

    college.value =
        'ГБПОУ Колледж информационных технологий "ИТ.Москва"';

    college.font = {
        bold:true,
        size:14
    };

    college.alignment = {
        horizontal:'center'
    };



    // =========================
    // Заголовок
    // =========================

    sheet.mergeCells('B7:AG7');

    const title = sheet.getCell('B7');

    title.value =
        'КАРТА УЧЕТА ПРОХОЖДЕНИЯ ПРАКТИКИ';

    title.font = {
        bold:true,
        size:16
    };

    title.alignment = {
        horizontal:'center'
    };



    // =========================
    // Практика
    // =========================

    sheet.mergeCells('B9:M9');

    const practice = sheet.getCell('B9');

    practice.value =
        document.querySelector('.practice-name').innerText;

    practice.fill = {
        type:'pattern',
        pattern:'solid',
        fgColor:{argb:'FFF200'}
    };

    practice.border = borderStyle;

    practice.alignment = {
        horizontal:'center'
    };



    // =========================
    // Группа
    // =========================

    sheet.getCell('N9').value = 'Группа';

    sheet.getCell('O9').value =
        document.querySelector('.group').innerText;

    sheet.getCell('O9').border = borderStyle;



    // =========================
    // Месяц
    // =========================

    sheet.getCell('B11').value = 'Месяц';

    sheet.mergeCells('C11:G11');

    const monthCell = sheet.getCell('C11');

    monthCell.fill = {
        type:'pattern',
        pattern:'solid',
        fgColor:{argb:'FFF200'}
    };

    monthCell.border = borderStyle;



    // =========================
    // Заголовок таблицы
    // =========================

    sheet.mergeCells('B13:B14');

    const fio = sheet.getCell('B13');

    fio.value = 'Ф.И.О. обучающегося';

    fio.alignment = {
        horizontal:'center',
        vertical:'middle',
        wrapText:true
    };

    fio.border = borderStyle;



    sheet.mergeCells('C13:AG13');

    const attend = sheet.getCell('C13');

    attend.value =
        'Отметки о явках и неявках';

    attend.alignment = {
        horizontal:'center'
    };

    attend.border = borderStyle;



    // =========================
    // Дни месяца
    // =========================

    for(let day = 1; day <= 31; day++){

        const cell =
            sheet.getCell(14, day + 2);

        cell.value = day;

        cell.alignment = {
            horizontal:'center'
        };

        cell.border = borderStyle;

    }



    // =========================
    // Данные студентов
    // =========================

    const rows =
        document.querySelectorAll(
            "#attendanceTable tbody tr"
        );

    let excelRow = 15;

    rows.forEach(row => {

        const cells = row.querySelectorAll("td");



        // ФИО

        const fioCell =
            sheet.getCell(excelRow, 2);

        fioCell.value = cells[0].innerText;

        fioCell.border = borderStyle;



        // Посещаемость

        for(let i = 1; i <= 31; i++){

            const htmlCell = cells[i];

            const excelCell =
                sheet.getCell(excelRow, i + 2);

            excelCell.value =
                htmlCell.innerText;

            excelCell.alignment = {
                horizontal:'center',
                vertical:'middle'
            };

            excelCell.border = borderStyle;



            // Цвета

            if(
                htmlCell.classList.contains('present')
            ){

                excelCell.fill = {
                    type:'pattern',
                    pattern:'solid',
                    fgColor:{argb:'92D050'}
                };

            }

            if(
                htmlCell.classList.contains('absent')
            ){

                excelCell.fill = {
                    type:'pattern',
                    pattern:'solid',
                    fgColor:{argb:'FF9999'}
                };

            }

        }

        excelRow++;

    });



    // =========================
    // Подписи
    // =========================

    sheet.getCell('B23').value =
        'Руководитель практики';

    sheet.getCell('B25').value =
        'Руководитель от колледжа';



    // =========================
    // Печать
    // =========================

    sheet.pageSetup = {
        orientation:'landscape',
        fitToPage:true,
        fitToWidth:1
    };



    // =========================
    // Сохранение
    // =========================

    const buffer =
        await workbook.xlsx.writeBuffer();

    saveAs(
        new Blob([buffer]),
        'Карта_учета_практики.xlsx'
    );

}

</script>