javascript 合并列仅显示为第一行

zbdgwd5y  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(143)

我有这个excel格式,然后将导入并显示到html表。

参与者总是有相同的培训师,所以我只是合并了培训师列,但问题是当console.log它,它只计为一行。
这是密码

const Importssss = document.getElementById('importInput');
           var JSONExcel = function () {
               this.parseExcel = function (file) {
                   var reader = new FileReader();
               reader.onload = function (e) {
            var data = e.target.result;
            var excelBinary = XLSX.read(data, { type: 'binary' });
            excelBinary.SheetNames.forEach(function (sheetName) { // Reading each sheet data in excel
                var XL_row_object = XLSX.utils.sheet_to_row_object_array(excelBinary.Sheets[sheetName]);
                var json_object = JSON.stringify(XL_row_object); // json from excel
                var excelData = (JSON.parse(json_object)); // json parsed from excel
                console.log(excelData);
            })
        };
        reader.onerror = function (ex) {
            console.log(ex);
        };
        reader.readAsBinaryString(file);
    };
};

      Importssss.addEventListener('change', function (evt) {
    var files = evt.target.files;
    if (files.length !== 0) {
        var JSONConvert = new JSONExcel();
        JSONConvert.parseExcel(files[0]); // Pass to Excel Converter Function
    }
})

这是输出

预期输出不应计为第一行,而应计为所有行。

qzwqbdag

qzwqbdag1#

您可以创建一个新数组来跟踪最后命名的培训师

你也可以用几种方法来简化你的代码。最重要的是,不需要JSON.stringify后面跟着JSON.parse。它们相互抵消,所以只要跳过这两行就行了。
只需调用XLSX.utils.sheet_to_row_object_array,但可能会像这样显式地命名结果变量:

const arrayOfRowsSkippingTrainer = XLSX.utils.sheet_to_row_object_array(excelBinary.Sheets[sheetName]);

然后,您可以创建一个数组,并填充缺失的Trainer

// const arrayOfRowsSkippingTrainer = XLSX.utils.sheet_to_row_object_array(excelBinary.Sheets[sheetName]);

const arrayOfRowsSkippingTrainer = [{
    Trainer: "T1",
    Participant: "P1",
    Subject: "S1",
    Score: "10"
  },
  {
    Participant: "P2",
    Score: "20",
    Subject: "S2",
  },
  {
    Participant: "P3",
    Score: "30"
  },
  {
    Trainer: "T2",
    Participant: "P4",
    Score: "40"
  },
  {
    Participant: "P5",
    Score: "50"
  },
  {
    Trainer: "T3",
    Participant: "P6",
    Score: "60"
  },
  {
    Trainer: "T4",
    Participant: "P7",
    Score: "70"
  },
]

let lastTrainer = "";
let lastSubject = "";
const arrayOfRows = arrayOfRowsSkippingTrainer.map(row => {
  if ("Trainer" in row) {
    lastTrainer = row.Trainer
  }
  if ("Subject" in row) {
    lastSubject = row.Subject
  }
  return { ...row,
    Trainer: lastTrainer,
    Subject: lastSubject,
  }
})

console.log(arrayOfRows)

相关问题