使用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
相关产品推荐
相关产品推荐

