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

使用excel.js+Node.js拆分CSV表头行:解决表头合入单个单元格问题

解决方法

问题出在两个核心点:

  • 读取CSV时未指定正确的分隔符,导致整行数据被解析到单个单元格
  • 写入CSV时同样未指定分隔符,表头无法正确拆分到多列

关键修正点

  • 读取CSV时,通过delimiter: ';'指定分号作为分隔符,确保每行数据正确拆分到对应列
  • 写入CSV时,同样指定delimiter: ';',保证输出的CSV列分隔正确
  • 修正输出文件名的错误(原代码中disciplina[0]会只取第一个字符,改为直接使用disciplina)
  • 优化工作表存储逻辑,用对象替代数组更直观

修正后的完整代码

static async tratarPlanilha(planilhaPath) {
    const workbook = new excelJs.Workbook();
    // 读取CSV时指定分号分隔符
    await workbook.csv.readFile(planilhaPath, { delimiter: ';' });

    const header = ['disciplina  teste', 'RESP_1', 'RESP_2', 'RESP_3', 'RESP_4', 'RESP_5', 'MEDIA', 'COD QUESTAO', 'TITULO', 'MEDIA GERAL', 'NUMERO PREENCHIMENTO'];
    const planilhas = {};

    workbook.eachSheet((sheet) => {
        sheet.eachRow((row) => {
            const disciplina = row.getCell(1).value;
            if (!planilhas[disciplina]) {
                planilhas[disciplina] = new excelJs.Workbook();
                const newSheet = planilhas[disciplina].addWorksheet(sheet.name);
                newSheet.addRow(header);
            }
            planilhas[disciplina].getWorksheet(sheet.name).addRow(row.values);
        });
    });

    for (const disciplina in planilhas) {
        const outputPath = `planilha_${disciplina}.csv`;
        // 写入CSV时指定分号分隔符
        await planilhas[disciplina].csv.writeFile(outputPath, { delimiter: ';' });
    }
}

原代码问题解析

原代码读取CSV时未指定分隔符,excel.js默认使用逗号作为分隔符,但你的CSV文件是用分号分隔的,导致整行数据被当成单个单元格内容。添加表头行后,写入CSV时同样默认用逗号分隔,最终表头和数据都无法正确拆分到多列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 07:31:05