You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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');
}

代码说明

  1. 用sheet_to_json的header:1选项将表格转为二维数组,便于直接操作单元格内容;
  2. 遍历过程中维护firstColValidValue变量,始终保存第一列的最新有效值;
  3. 处理完成后用aoa_to_sheet将二维数组转回工作表,再生成新工作簿导出。

内容的提问来源于stack exchange,提问作者Big Dumb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:25:24