如何在TypeScript中使用XLSX包填充或拆分XLSX工作表的合并单元格?
使用XLSX + TypeScript填充表格空单元格
核心逻辑
遍历表格行,维护第一列的有效值,遇到第一列为空的行,直接用之前记录的有效值填充,最后导出处理后的数据。
实现步骤
首先安装依赖:
npm install xlsx
浏览器环境处理上传文件的代码
import * as XLSX from 'xlsx'; // 处理用户上传的Excel文件 function processUploadedExcel(file: File) { const reader = new FileReader(); reader.onload = (e) => { // 读取文件并解析为工作簿 const data = new Uint8Array(e.target?.result as ArrayBuffer); const workbook = XLSX.read(data, { type: 'array' }); // 获取第一个工作表 const targetSheet = workbook.Sheets[workbook.SheetNames[0]]; // 转换为二维数组格式(方便遍历处理) const rawData = XLSX.utils.sheet_to_json(targetSheet, { header: 1 }) as string[][]; // 处理空值填充 let firstColValidValue = ''; const processedData = rawData.map((row, idx) => { // 表头行,记录第一列的初始值 if (idx === 0) { firstColValidValue = row[0] || ''; return row; } // 非表头行,第一列为空则填充有效值 if (!row[0]) { return [firstColValidValue, ...row.slice(1)]; } else { // 更新有效值为当前行的第一列值 firstColValidValue = row[0]; return row; } }); // 生成新工作簿并导出 const newSheet = XLSX.utils.aoa_to_sheet(processedData); const newWorkbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(newWorkbook, newSheet, '处理后数据'); XLSX.writeFile(newWorkbook, '填充后的数据.xlsx'); }; reader.readAsArrayBuffer(file); }
Node.js环境处理本地文件的代码
import * as XLSX from 'xlsx'; import * as fs from 'fs'; function processLocalExcel() { // 读取本地Excel文件 const workbook = XLSX.readFile('原始数据.xlsx'); const targetSheet = workbook.Sheets[workbook.SheetNames[0]]; const rawData = XLSX.utils.sheet_to_json(targetSheet, { header: 1 }) as string[][]; // 空值填充逻辑和浏览器端一致 let firstColValidValue = ''; const processedData = rawData.map((row, idx) => { if (idx === 0) { firstColValidValue = row[0] || ''; return row; } if (!row[0]) { return [firstColValidValue, ...row.slice(1)]; } else { firstColValidValue = row[0]; return row; } }); // 导出处理后的文件 const newSheet = XLSX.utils.aoa_to_sheet(processedData); const newWorkbook = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(newWorkbook, newSheet, '处理后数据'); XLSX.writeFile(newWorkbook, '填充后的数据.xlsx'); }
代码说明
- 用
sheet_to_json的header:1选项将表格转为二维数组,便于直接操作单元格内容; - 遍历过程中维护
firstColValidValue变量,始终保存第一列的最新有效值; - 处理完成后用
aoa_to_sheet将二维数组转回工作表,再生成新工作簿导出。
内容的提问来源于stack exchange,提问作者Big Dumb
相关产品推荐
相关产品推荐

