首页 > 解决方案 > readXlsxFile在节点js中乱序读取excel表

问题描述

我正在使用下面的代码来读取和填充我的地图。但是即使在对代码应用承诺之后,表格数据也会被乱序读取。因此交换了 2 个键数据(键是工作表名称)。

异步函数getSheetRows(sheetIndexMap,文件){

let sheetRowsMap = {};
const promises = sheetIndexMap.map(async (sheet) => {
  return {
    sheetName: sheet.name,
    sheetRows: await readXlsxFile(file, { sheet:sheet.name})
  }
})
const sheetRowsByResources = await Promise.all(promises);
sheetRowsByResources.forEach (sheetRowsByResource => {
  sheetRowsMap[sheetRowsByResource.sheetName] = sheetRowsByResource.sheetRows
})
return sheetRowsMap

}

async function getResourceDataMap(stationCode, event) {
      let file = event.target.files[0];
      let sheetIndexMap = await readXlsxFile(file, { getSheets : true} );
      let resourceDataMap = {};
      const sheetRowsMap = await getSheetRows(sheetIndexMap, file);
      /*
           Consider all the sheets
           */
        Object.keys(sheetRowsMap).map((sheetName) => {
        if(isSheetNameValid(sheetName)) {
          console.log("Entered for sheetName::" + sheetName);
          let sheetRows = sheetRowsMap[sheetName];
          console.log("sheet Rows for:::::" +sheetName + " are " + sheetRows.length);
          if (sheetRows != null && sheetRows.length > 1) { // we need atleast two rows
              let headers = sheetRows[0];
              console.log("header obtained is:" +headers);

              if(isColumnNamesValid(sheetName, headers)) {
                  let sheetMapList = getSheetMap(sheetRows);
                  console.log("SheetMapList obtained is:" + sheetMapList);

                  // STEP : Create a map of the various sheets (corresponding to each resource type)
                  console.log("SheetName here is::::::::" +sheetName);
                  resourceDataMap[sheetName] = {
                      headerRows: headers,
                      sheetMapList : sheetMapList
                  };
                  console.log("Resource data Map within :" + resourceDataMap["PRE_STAGING_AREA"]);
              }
          }
        }
      }) 
      return resourceDataMap;

}

请帮忙!!!!

标签: node.jsreactjsasynchronousasync-await

解决方案


问题在于 read-excel-file 节点插件版本。我将它从 3.x 更改为 4.x。


推荐阅读