Как выйти из метода eachRow? - PullRequest
0 голосов
/ 08 мая 2020

Если условие выполнено, я хочу прекратить зацикливание оставшихся строк:

var express = require('express');
var router = express.Router();
var Excel = require("exceljs");
var path = require("path");

router.get("/lireExcel/:nbRows", function(req, res) {
    var ret = [];
    var nb = req.params.nbRows;
    var i = 0;
    var filename = path.join(__dirname, 'test.xlsx');
    var workbook = new Excel.Workbook();
    workbook.xlsx.readFile(filename).then(function () {
        var sheet = workbook.getWorksheet(1);
        sheet.eachRow(function(enreg, rowNumber) {
            if (rowNumber > 1) { // after the header
                i++;
                if (i <= nb) { // get only the nb number of rows
                    var row = sheet.getRow(rowNumber);
                    var msisdn = row.getCell(1).value;
                    var matricule = row.getCell(2).value;
                    if (msisdn != null) {
                        ret.push({"msisdn":msisdn, "immatriculation":matricule});
                    }
                }
                else {
                    // how to get out of the loop here ?
                }
            }
        }
    }
});

Как в этом случае выйти из метода eachRow?

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Два доступных способа добиться этого:

  1. Я рекомендую использовать xlsx-import lib для импорта данных из файлов Excel: https://www.npmjs.com/package/xlsx-import

  2. это может перебирать все строки:

const last = ws.rowCount; // it;s a getter, should be called once before
for(let i = 0; i < last; i++){

}
(дополнительная информация): Начиная с версии 4 Excel Js позволяет: https://github.com/exceljs/exceljs/pull/1135
const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx');
for await (const worksheetReader of workbookReader) {
 for await (const row of worksheetReader) {
   // ...
   // break;
 }
}

Он должен быть опубликован в npm скоро

0 голосов
/ 08 мая 2020

вы можете читать строка за строкой последовательно

for(let i = 0; i < totalRow; i++){

    result = getRow(i)  //you can do this with an asynchronous call      

    if (result == condition) {
        break;
    }
}
...