在 TypeScript 中处理 Excel:库、工具和代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 TypeScript 中处理 Excel:工具完整概述



TypeScript 作为 JavaScript 的静态类型超集,为创建复杂的企业级应用程序提供了出色的能力。常见的任务之一就是处理 Microsoft Excel 文件——读取、创建和编辑表格。在本文中,我们将介绍在 TypeScript 中处理 Excel 的最佳库、它们的特点,并提供实用的代码示例。



流行的 Excel 处理库



目前,有几种成熟的解决方案。以下是主要的几种:



  • ExcelJS — 功能最强大的库,支持样式、公式、图表和流式处理。
  • xlsx (SheetJS) — 轻量且快速的库,非常适合简单的读/写操作。
  • node-excel-export — 已过时,但仍用于遗留项目中。
  • Excel4Node — 专注于创建带有格式的复杂报告。


对于大多数现代 TypeScript 项目,我们推荐使用 ExcelJS 和 xlsx (SheetJS)。让我们详细了解它们。



安装和配置



这两个库都可以通过 npm 安装:



npm install exceljsnpm install xlsx


对于 TypeScript,需要安装类型定义(如果未随附):



npm install --save-dev @types/node


请注意:ExcelJS 自带内置类型,而 xlsx 的类型需要单独安装:



npm install --save-dev @types/xlsx


示例 1:使用 ExcelJS 创建 Excel 文件



创建一个带有数据和样式的简单表格:



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:使用 xlsx (SheetJS) 读取 Excel 文件



读取现有文件并将数据输出到控制台:



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 库会自动将表格转换为对象数组,其中键是列标题。

推荐