csv 使用excel.js模块+ node.js分隔标题行中的列

umuewwlo  于 5个月前  发布在  Node.js
关注(0)|答案(4)|浏览(58)

我试图使用excel.js向CSV文件添加标题行,但该行中的所有列都在一个单元格中结束。
如何分隔列?


的数据
如有任何帮助,我们将不胜感激
我尝试的代码是:

static async tratarPlanilha(planilhaPath) {
        const workbook = new excelJs.Workbook();
        await workbook.csv.readFile(planilhaPath);

        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, sheetId) => {
            sheet.eachRow((row, rowNumber) => {
                const disciplina = row.getCell(1).value;
                const valores = disciplina.split(';');
                console.log(valores[0]);
                if (!planilhas[valores[0]]) {
                    planilhas[valores[0]] = new excelJs.Workbook();
                    planilhas[valores[0]].addWorksheet(sheet.name);
                    planilhas[valores[0]].getWorksheet(sheet.name).addRow(header);
                }
                planilhas[valores[0]].getWorksheet(sheet.name).addRow(row.values);
            })
        });
        for (const disciplina in planilhas) {
            const outputPath = `planilha_${disciplina[0]}.csv`;
            await planilhas[disciplina].csv.writeFile(outputPath);
        }
    }

字符串

7qhs6swi

7qhs6swi1#

它们 * 看起来 * 在一个单元格中,因为这是计算机上Excel在打开CSV时显示CSV的方式,但是如果您导入它,并使用,作为一个空格,它应该显示为分隔的。
它似乎用;分隔数据,所以如果它不重要,你可以调整CSV格式以适应Excel最初显示数据的方式,但不推荐这样做(在其他计算机上,它可能会显示在一个单元格中,并且很难处理它,因为它不会有逗号作为常用的分隔符.)。
为此,在options中使用;作为缓存,然后将其传递给writeFile
注意:这将使;作为CSV格式,而不是逗号(,

const options = {
    formatterOptions: {
        delimiter: ';',
        quote: true,
    }
};

//..
await planilhas[disciplina].csv.writeFile(outputPath, options);
//..

字符串

qaxu7uf2

qaxu7uf22#

这个问题可能是在程序中看到的.csv,我运行你的代码,输出很好。我用的是vs代码扩展。
output using vs code excel viewer

toiithl6

toiithl63#

看起来你是把标题作为一行。根据文档,要添加一个标题,你可以在初始化CSV时包含一个额外的参数:

planilhas[valores[0]].addWorksheet(sheet.name, {
  headerFooter:{firstHeader: "Headers content", firstFooter: "Footer content"}
});

字符串

xj3cbfub

xj3cbfub4#

演示代码,它将支持多个表太多。
保存为“save-csv.js”

const ExcelJS = require('exceljs');
const fs = require('fs');
const path = require('path');

class SpreadsheetProcessor {
    static async processSpreadsheet(spreadsheetPath, csvPath) {
        const workbook = new ExcelJS.Workbook();
        await workbook.xlsx.readFile(spreadsheetPath);

        let csvContent = [];

        workbook.eachSheet((sheet, sheetId) => {
            sheet.eachRow((row, rowNumber) => {
                let rowData = [];
                row.eachCell({ includeEmpty: true }, (cell, colNumber) => {
                    rowData.push(cell.text);
                });
                csvContent.push(rowData.join(','));
            });
        });

        fs.writeFileSync(csvPath, csvContent.join('\n'));
        console.log(`Data saved to ${csvPath}`);
    }
}

async function main() {
    const fileName = 'data.xlsx';
    const csvFileName = 'data.csv';
    await SpreadsheetProcessor.processSpreadsheet(fileName, csvFileName);
}

main().catch(error => console.error(error));

字符串
输入文件x1c 0d1x
结果

disciplina teste,RESP_1,RESP_2,RESP_3,RESP_4,RESP_5,MEDIA,COD QUESTAO,TITULO,MEDIA GERAL,NUMERO PREENCHIMENTO
x,0,0,5,1,3,64,2,Q2,4,01,8
x,0,0,5,2,3,64,3,Q3,4,01,8
x,0,0,3,1,12,1,Q1,4,01,8

相关问题