1

当我使用该方法上传文件 xlsx 时,我正在使用 SheetJS

_file(file) {
   /* Boilerplate to set up FileReader */
      const reader = new FileReader();
      reader.onload = (e) => {
      /* Parse data */
      const bstr = e.target.result;
      const wb = XLSX.read(bstr, {type:'binary'});
      /* Get first worksheet */
      const wsname = wb.SheetNames[0];
      const ws = wb.Sheets[wsname];
      /* Convert array of arrays */
      const data = XLSX.utils.sheet_to_json(ws, {header:1});
      /* Update state */
      this.data = data;
      this.cols = make_cols(ws['!ref']);
     };
   reader.readAsBinaryString(file);
}

我得到了一些有数据的单元格,但它包括一些没有数据的行如何删除它?我只想查看有数据的行。TIA

4

3 回答 3

6

为了删除没有任何数据的行,您可以使用 option blankRows: false,如下所示:

const data = XLSX.utils.sheet_to_json(ws, {header:1, blankRows: false});

据我所知,此选项不能与 option 一起使用defval,因此,如果您想为某些空单元格设置默认选项,但要删除空白行,则必须编写自定义函数。这里有一个关于这个错误的未解决问题:sheet_to_json does not skip blank rows

于 2019-02-05T11:12:47.350 回答
3

正如 Naupad 在之前的评论中提到的,
将属性blankRows全部设置为小写可以按预期工作......

data = XLSX.utils.sheet_to_json(ws, {
    header:1,
    blankrows: false
});
于 2021-01-03T02:12:27.077 回答
0

我也有这样的问题,defval 和 blankrows 不符合我的条件,因为 defval 还读取带边框的空行,而 blankrows 连续跳过空单元格,所以我创建了一些函数来将输出 sheetdata 迭代到新的数据数组见下文。

// body...

 /* var sd= XLSX.utils.sheet_to_json(ws,{header:1,defval:""}); */
 /* var sheetdata = sheetjs_cleanEmptyRows(sd) */
 function sheetjs_cleanEmptyRows(sd) {
    const data = []

        for (var row = 0; row < sd.length; row++) {

              var i = sd[row].length;
              var j = 0;

            for ( var cell = 0; cell < sd[row].length; cell++){

                if (sd[row][cell].length == 0 ) { j++}
            }
          if (j < i) {
            data.push(sd[row]);
          }

        }
        return data;
 }
于 2021-11-15T09:49:38.333 回答