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

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

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

Начать курс

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

TypeScript — мощный язык для разработки веб-приложений, и часто возникает необходимость программно работать с файлами Excel: читать отчёты, генерировать таблицы, экспортировать данные. В этой статье мы рассмотрим три основные библиотеки для работы с Excel в TypeScript, их возможности и приведём практические примеры.

1. Основные библиотеки для работы с Excel в TypeScript

Существует несколько популярных решений, каждое из которых имеет свои сильные стороны:

  • ExcelJS — самая популярная библиотека для чтения, записи и стилизации Excel-файлов. Поддерживает .xlsx, .xlsm, .csv, а также работу с формулами, условным форматированием и изображениями.
  • xlsx (SheetJS) — лёгкая и быстрая библиотека для базовых операций: чтения и записи табличных данных. Идеально подходит для простых задач.
  • excel4node — библиотека для создания Excel-файлов с акцентом на производительность и поддержку стилей.

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

Для установки выбранной библиотеки используйте npm. Рассмотрим установку ExcelJS и xlsx:

npm install exceljs
npm install xlsx

Для TypeScript дополнительно установите типы (для xlsx они встроены):

npm install @types/exceljs --save-dev
npm install @types/node --save-dev

3. Работа с Excel через ExcelJS

3.1 Создание и запись файла

Создадим новый Excel-файл с заголовками и данными:

import * as ExcelJS from 'exceljs';

async function createExcel() {
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet('Данные');

  // Определяем колонки
  worksheet.columns = [
    { header: 'Имя', key: 'name', width: 25 },
    { header: 'Возраст', key: 'age', width: 10 },
    { header: 'Город', key: 'city', width: 20 }
  ];

  // Добавляем строки
  worksheet.addRow({ name: 'Анна', age: 28, city: 'Москва' });
  worksheet.addRow({ name: 'Иван', age: 35, city: 'Санкт-Петербург' });
  worksheet.addRow({ name: 'Ольга', age: 22, city: 'Казань' });

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

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

createExcel();

3.2 Чтение существующего файла

Прочитаем данные из ранее созданного файла:

async function readExcel() {
  const workbook = new ExcelJS.Workbook();
  await workbook.xlsx.readFile('example.xlsx');

  const worksheet = workbook.getWorksheet('Данные');
  if (!worksheet) return;

  worksheet.eachRow((row, rowNumber) => {
    const rowData = row.values as any[];
    console.log(`Строка ${rowNumber}: ${rowData.join(', ')}`);
  });
}

readExcel();

4. Работа с Excel через xlsx (SheetJS)

4.1 Чтение данных

Библиотека xlsx позволяет быстро прочитать данные из файла:

import * as XLSX from 'xlsx';

function readXlsxFile(filePath: string) {
  const workbook = XLSX.readFile(filePath);
  const sheetName = workbook.SheetNames[0];
  const worksheet = workbook.Sheets[sheetName];
  const data = XLSX.utils.sheet_to_json(worksheet);
  console.log(data);
}

readXlsxFile('example.xlsx');

4.2 Создание и запись

Создадим простой Excel-файл из массива объектов:

function createXlsx() {
  const data = [
    { Name: 'Анна', Age: 28, City: 'Москва' },
    { Name: 'Иван', Age: 35, City: 'СПб' }
  ];

  const worksheet = XLSX.utils.json_to_sheet(data);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, 'Лист1');
  XLSX.writeFile(workbook, 'output.xlsx');
  console.log('Файл сохранён');
}

createXlsx();

5. Продвинутые возможности ExcelJS

5.1 Формулы и условное форматирование

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

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

  ws.getCell('A1').value                    

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