首页 > 解决方案 > 如何突破 eachRow 方法?

问题描述

如果满足条件,那么我想停止循环剩余的行:

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 方法?

标签: node.jsexceljs

解决方案


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((成功) => {

  console.log(success);

},

(error) => {

  console.log(error);

}

);


推荐阅读