1

原始 Excel 文件

在此处输入图像描述

过滤后的 Excel 文件

在此处输入图像描述

代码

onFileChange(evt: any) {
    /* wire up file reader */
    const target: DataTransfer = <DataTransfer>(evt.target);
    if (target.files.length !== 1) throw new Error('Cannot use multiple files');
    const reader: FileReader = new FileReader();
    reader.onload = (e: any) => {
      /* read workbook */
      const bstr: string = e.target.result;
      const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });

      /* grab first sheet */
      const wsname: string = wb.SheetNames[0];
      const ws: XLSX.WorkSheet = wb.Sheets[wsname];

      /* save data */
      this.data = <AOA>(XLSX.utils.sheet_to_json(ws, { header: 1 }));
      console.log(this.data);
    };
    reader.readAsBinaryString(target.files[0]);
  }

问题?

  1. 如何检查是否过滤了excel文件?

  2. 如何仅读取过滤后的值数据?

4

1 回答 1

0
import * as Excel from "exceljs/dist/exceljs.min.js";
   
 checkHiddenRowAndColumns(file) {
        const workbook = new Excel.Workbook();
        const arryBuffer = new Response(file).arrayBuffer();
        arryBuffer.then(function (data) {
          workbook.xlsx.load(data)
            .then(function () {
              const worksheet = workbook.getWorksheet(1);
    
              //check hidden columns
              for(var i=0; i < worksheet.columns.length; i++) {
                if(worksheet.columns[i].hidden == true){
                  console.log('hidden columns' + i)
                }
              }
    
              //check hidden rows
              worksheet.eachRow(function (row,rowNumber) {
                if(row.hidden == true) {
                  console.log('hidden row' + rowNumber)
                }
              });
              this.spinnerService.hide();
            });
        });
      }
    
      
    
      onFileChange(evt: any) {
        this.spinnerService.show();
        this.data = [];
        this.uploadedFileName = '';
        /* wire up file reader */
        const target: DataTransfer = <DataTransfer>(evt.target);
        if (target.files.length > 1) throw new Error('Cannot use multiple files');
        if (target.files.length === 1) {
          this.checkHiddenRowAndColumns(target.files[0]);
          this.enableImportExcel = true;
          const file = target.files[0];
          this.searchFilterForm.get('edt').setValue(file);
          this.uploadedFileName = target.files[0].name;
    
          if (target.files.length == 1 && (target.files[0].type == ".xlsx" || target.files[0].type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || target.files[0].type == "application/vnd.ms-excel")) {
            const reader: FileReader = new FileReader();
            reader.onload = (e: any) => {
              /* read workbook */
              const bstr: string = e.target.result;
              const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });
    
              /* grab first sheet */
              const wsname: string = wb.SheetNames[0];
              const ws: XLSX.WorkSheet = wb.Sheets[wsname];
    
              this.data = (XLSX.utils.sheet_to_json(ws, { header: 1, raw: false }));
    
            };
            reader.readAsBinaryString(target.files[0]);
          }
          else {
            this.enableImportExcel = false;
          }
        } else {
          this.uploadedFileName = "";
        }
      }
于 2021-02-04T06:56:06.157 回答