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

Node.js使用xlsx模块同时增删Excel行出现重复数据问题

问题描述

使用Node.js的xlsx模块操作Excel文件,单独调用删除行或插入行函数时功能正常,但同时调用两者时,会出现最后一条数据重复的异常,无法正常添加新数据。

测试数据:

let datos = [
    {
        "Dato 1" : 1,
        "Dato 2" : 2,
        "Dato 3" : 3
    },
    {
        "Dato 1" : 4,
        "Dato 2" : 5,
        "Dato 3" : 6
    },
    {
        "Dato 1" : 7,
        "Dato 2" : 8,
        "Dato 3" : 9
    }
 ]

核心问题表现:

  • 仅调用插入函数:数据可正确写入
  • 仅调用删除函数:可删除表头外所有数据
  • 同时调用删除+插入:最终数据出现重复,不符合预期
问题原因
  1. 删除函数的循环逻辑缺陷:deleteAllExcelRows采用从前往后的顺序删除行,删除一行后后续行会自动上移,导致部分行被跳过(例如删除行1后,原行2变为新行1,但循环下一个i=2时,实际操作的是原行3,漏掉了新行1)。即便单独删除时看似正常,实际可能存在残留数据,为后续插入重复埋下隐患。
  2. 插入函数的逻辑错误:putDataExcel每次调用时,都会先读取当前工作表的所有数据转为JSON数组,追加新数据后再将整个数组写回工作表。这会导致每次插入时都重复写入之前的所有数据,最终造成数据重复。
解决方法

1. 修复删除循环逻辑

将deleteAllExcelRows的循环改为从后往前删除,避免行上移导致的漏删问题:

function deleteAllExcelRows(ws)
{
    let numeroFilas = parseInt(xlsx.utils.decode_range(ws['!ref']).e.r)
    // 从最后一行开始往前删除,避免行上移漏删
    for(let i = numeroFilas;i >=1;i--)
    {
        deleteExcelRow(ws,i);
        console.log("Dato " + i + " Eliminado ")
    }
}

2. 简化插入逻辑,避免重复写入

不需要每次读取现有数据再追加,直接使用sheet_add_json的追加模式插入单条数据:

function putDataExcel(ws, data) {
    // origin: -1 表示追加到工作表末尾
    xlsx.utils.sheet_add_json(ws, [data], { origin: -1 });
    xlsx.writeFile(wb, FILENAME);
}

同时修改调用插入函数的循环:

console.log("Put new data...\n");
for (let i = 0; i < datos.length; i++) {
    putDataExcel(woorksheet, datos[i]);
}

3. 可选:高效批量删除所有数据

如果不需要逐行删除的日志,可直接重置工作表范围并清空数据单元格,效率更高:

function deleteAllExcelRows(ws) {
    const range = xlsx.utils.decode_range(ws['!ref']);
    // 仅保留表头行(行索引0)
    range.e.r = range.s.r;
    ws['!ref'] = xlsx.utils.encode_range(range);
    
    // 清空所有原数据单元格
    const originalRowCount = parseInt(xlsx.utils.decode_range(ws['!ref']).e.r);
    for (let R = range.s.r + 1; R <= originalRowCount; R++) {
        for (let C = range.s.c; C <= range.e.c; C++) {
            delete ws[ec(R, C)];
        }
    }
    xlsx.writeFile(wb, FILENAME);
}

内容的提问来源于stack exchange,提问作者Harold Burbano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:40:31