Reputation: 19287
If a condition is met then I want to stop looping the remaining rows :
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 ?
}
}
}
}
});
How to get out of the eachRow method in this case ?
Upvotes: 1
Views: 2950
Reputation: 144
const excelPromise = new Promise((resolve, reject) => {
workbook.getWorksheet(1).eachRow(async(row, rowNumber) => {
if (rowNumber > 1) {
i++;
if (i <= nb) { ... }
else reject('Invalid ...');
// finally resolve
if(rowNumber == workbook.getWorksheet('data').rowCount) {
resolve();
}
}
})
})
excelPromise.then((success) => {
console.log(success);
},
(error) => {
console.log(error);
});
Upvotes: 0
Reputation: 68
Two available ways to achieve it:
I recommend using xlsx-import
lib for importing data from excel files: https://www.npmjs.com/package/xlsx-import
this is able to iterate through all rows:
const last = ws.rowCount; // it;s a getter, should be called once before
for(let i = 0; i < last; i++){
}
const workbookReader = new ExcelJS.stream.xlsx.WorkbookReader('./file.xlsx');
for await (const worksheetReader of workbookReader) {
for await (const row of worksheetReader) {
// ...
// break;
}
}
It should be published in npm soon
Upvotes: 0
Reputation: 467
you can read row by row sequentially
for(let i = 0; i < totalRow; i++){
result = getRow(i) //you can do this with an asynchronous call
if (result == condition) {
break;
}
}
Upvotes: 1