解析excel文件并在nodejs上的exceljs中创建JSON格式

Gag*_*ous 1 json node.js exceljs

我有这个excel文件

在此输入图像描述

我需要将数据 excel 从文件转换为 JSON,如下所示

[
   {
   "no_pemohonan": "PNL-202109200826210023105",
   "sumber_data": "HOSTS",
   "tgl_permohonan": "2021-09-20",
   },
   {
   "no_pemohonan": "PNL-202109200845131363376",
   "sumber_data": "HOSTS",
   "tgl_permohonan": "2021-09-20",
   },
   ...
]
Run Code Online (Sandbox Code Playgroud)

我可以使用此注释创建数据,但我必须像下面的语法一样再次设置对象

            const excel = require('exceljs');
            const workbook = new excel.Workbook();


            await workbook.xlsx.load(objDescExcel.buffer);
            let json = workbook.model;
            let worksheetsArr = json.worksheets.length;
            const arrRow = [];
            const arrIdPembatalan = [];

            // looping per worksheet
            for (let index = 0; index < worksheetsArr; index++) {
                let worksheet = workbook.worksheets[index];
                // console.log("worksheet " + worksheet);
                const rowlast = worksheet.lastRow;
                // looping semua row untuk
                worksheet.eachRow(async (row, rowNumber) => {
                    let new_row = row.values
                    // console.log(new_row);
                        let no_permohonan= new_row[2]
                        let sumber_data = new_row[3]
                        let tgl_permohonan = new_row[4]
                        
                        let header = {
                            no_permohonan: no_permohonan,
                            sumber_data : sumber_data ,
                            tgl_permohonan : tgl_permohonan ,
                        };
                        arrIdPembatalan.push(header)
                    }
                })
        }
Run Code Online (Sandbox Code Playgroud)

我想自动设置标题,而不必像上面的语法一样再次设置标题。我已经看到了这个解决方案,但它是在xlsx库中编写的,而我正在使用exceljs.

小智 6

这是一个nodejs实现。

(async function() {
    const excel = require('exceljs');
    const workbook = new excel.Workbook();
    // use readFile for testing purpose
    // await workbook.xlsx.load(objDescExcel.buffer);
    await workbook.xlsx.readFile(process.argv[2]);
    let jsonData = [];
    workbook.worksheets.forEach(function(sheet) {
        // read first row as data keys
        let firstRow = sheet.getRow(1);
        if (!firstRow.cellCount) return;
        let keys = firstRow.values;
        sheet.eachRow((row, rowNumber) => {
            if (rowNumber == 1) return;
            let values = row.values
            let obj = {};
            for (let i = 1; i < keys.length; i ++) {
                obj[keys[i]] = values[i];
            }
            jsonData.push(obj);
        })

    });
    console.log(jsonData);
})();
Run Code Online (Sandbox Code Playgroud)

测试结果

$ node ./test.js ~/Documents/Book1.xlsx
[
  {
    no_pemohonan: 'PNL-202109200826210023105',
    sumber_data: 'HOSTS',
    tgl_permohonan: 2021-09-20T00:00:00.000Z
  },
  {
    no_pemohonan: 'PNL-202109200845131363376',
    sumber_data: 'HOSTS',
    tgl_permohonan: 2021-09-20T00:00:00.000Z
  }
]
Run Code Online (Sandbox Code Playgroud)