在 TypeScript 中处理 Excel:库、示例和工具
TypeScript 是用于开发 Web 应用程序的强大语言,经常需要以编程方式处理 Excel 文件:读取报告、生成表格、导出数据。在本文中,我们将介绍三个用于在 TypeScript 中处理 Excel 的主要库、它们的功能,并提供实际示例。
1. 用于在 TypeScript 中处理 Excel 的主要库
有几种流行的解决方案,每种都有其优势:
- ExcelJS — 用于读取、写入和样式化 Excel 文件的最流行库。支持 .xlsx、.xlsm、.csv,以及公式、条件格式和图像的处理。
- xlsx (SheetJS) — 用于基本操作(读取和写入表格数据)的轻量级快速库。非常适合简单任务。
- excel4node — 用于创建 Excel 文件的库,侧重于性能和对样式的支持。
2. 安装和配置
使用 npm 安装所选库。我们来看一下 ExcelJS 和 xlsx 的安装:
npm install exceljsnpm install xlsx对于 TypeScript,额外安装类型(xlsx 的类型已内置):
npm install @types/exceljs --save-devnpm install @types/node --save-dev3. 通过 ExcelJS 处理 Excel
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. 通过 xlsx (SheetJS) 处理 Excel
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, wor