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