Работа с Excel в TypeScript: библиотеки, инструменты и примеры кода

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Excel в TypeScript: полный обзор инструментов

TypeScript, как статически типизированная надстройка над JavaScript, предоставляет отличные возможности для создания сложных корпоративных приложений. Одной из частых задач является работа с файлами Microsoft Excel — чтение, создание и редактирование таблиц. В этой статье мы рассмотрим лучшие библиотеки для работы с Excel в TypeScript, их особенности и приведём практические примеры кода.

Популярные библиотеки для работы с Excel

На сегодняшний день существует несколько зрелых решений. Вот основные из них:

  • ExcelJS — самая мощная библиотека с поддержкой стилей, формул, диаграмм и потоковой обработки.
  • xlsx (SheetJS) — лёгкая и быстрая библиотека, идеальна для простых операций чтения/записи.
  • node-excel-export — устаревшая, но всё ещё используемая в легаси-проектах.
  • Excel4Node — специализируется на создании сложных отчётов с форматированием.

Для большинства современных проектов на TypeScript мы рекомендуем ExcelJS и xlsx (SheetJS). Рассмотрим их подробнее.

Установка и настройка

Установка обеих библиотек производится через npm:

npm install exceljs
npm install xlsx

Для TypeScript необходимо установить типы (если они не идут в комплекте):

npm install --save-dev @types/node

Обратите внимание: ExcelJS поставляется со встроенными типами, а для xlsx типы нужно устанавливать отдельно:

npm install --save-dev @types/xlsx

Пример 1: Создание Excel-файла с помощью ExcelJS

Создадим простую таблицу с данными и стилями:

import ExcelJS from 'exceljs';

async function createWorkbook() {
    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet('Отчёт');

    // Определяем колонки
    sheet.columns = [
        { header: 'ID', key: 'id', width: 10 },
        { header: 'Имя', key: 'name', width: 25 },
        { header: 'Дата', key: 'date', width: 15 },
        { header: 'Сумма', key: 'amount', width: 12 }
    ];

    // Добавляем строки
    sheet.addRow({ id: 1, name: 'Иван Петров', date: '2024-01-15', amount: 1500.50 });
    sheet.addRow({ id: 2, name: 'Мария Сидорова', date: '2024-02-20', amount: 2300.75 });
    sheet.addRow({ id: 3, name: 'Алексей Иванов', date: '2024-03-10', amount: 890.25 });

    // Стилизация заголовка
    const headerRow = sheet.getRow(1);
    headerRow.font = { bold: true, size: 12, color: { argb: 'FFFFFFFF' } };
    headerRow.fill = { type: 'pattern', pattern: 'solid', fgColor: { argb: 'FF4472C4' } };
    headerRow.alignment = { horizontal: 'center' };

    // Сохраняем файл
    await workbook.xlsx.writeFile('output.xlsx');
    console.log('Файл создан!');
}

createWorkbook();

Этот код создаёт файл output.xlsx с тремя строками данных и красивым заголовком.

Пример 2: Чтение Excel-файла с помощью xlsx (SheetJS)

Прочитаем существующий файл и выведем данные в консоль:

import * as XLSX from 'xlsx';

function readExcel(filePath: string) {
    const workbook = XLSX.readFile(filePath);
    const sheetName = workbook.SheetNames[0]; // Берём первый лист
    const worksheet = workbook.Sheets[sheetName];

    // Преобразуем в JSON
    const data: any[] = XLSX.utils.sheet_to_json(worksheet);

    console.log('Данные из файла:');
    data.forEach((row, index) => {
        console.log(`Строка ${index + 1}:`, row);
    });

    return data;
}

// Использование
const data = readExcel('input.xlsx');

Библиотека xlsx автоматически преобразует таблицу в массив объектов, где ключи — это заголовки колонок.

Пример 3: Форматирование и формулы в ExcelJS

ExcelJS позволяет добавлять формулы и сложное форматирование:

import ExcelJS from 'exceljs';

async function advancedExample() {
    const workbook = new ExcelJS.Workbook();
    const sheet = workbook.addWorksheet('Финансы');

    // Данные
    sheet.addRow(['Товар', 'Цена', 'Количество', 'Итого']);
    sheet.addRow(['Ноутбук', 50000, 3]);
    sheet.addRow(['Мышь', 1500, 10]);
    sheet                    

Рекомендаций