【问题标题】:Angular how to read an excel file from an assets folder using typeScriptAngular如何使用typeScript从资产文件夹中读取excel文件
【发布时间】:2020-05-25 11:15:56
【问题描述】:

不好意思问,但为了解决我的问题,我需要问。 因此,我在从 Angular 项目中的 excel 文件中读取数据时遇到问题。该文件位于 assets 文件夹中。

我知道如何从文件夹中获取文件。

ngOnInit 内的 app.component.ts 中,我得到一个文件:

ngOnInit() {
  this.http.get('assets/dataTest.xlsx').subscribe((data: any) => {
    console.log("get: " + data);
  });
}

我如何理解 http.get 我需要使用下面的代码:

const reader: FileReader = new FileReader();
reader.onload = (e: any) => {
  console.log("READ " + e);
};
reader.readAsBinaryString(data);

但它不起作用。我收到一个错误:

错误类型错误:无法在“FileReader”上执行“readAsBinaryString”:参数 1 不是“Blob”类型。

请帮助我从 assets 文件夹中的 excel 文件中读取数据。

【问题讨论】:

    标签: excel angular typescript


    【解决方案1】:

    我只是解决这个问题。

    read() {
    this.httpClient.get('assets/files/Report DTP.xls', { responseType: 'blob' })
      .subscribe((data: any) => {
        const reader: FileReader = new FileReader();
    
        let dataJson1;
        let dataJson2;
    
        reader.onload = (e: any) => {
          const bstr: string = e.target.result;
          const wb: XLSX.WorkBook = XLSX.read(bstr, { type: 'binary' });
    
          /* grab first sheet */
          const wsname1: string = wb.SheetNames[1];
          const ws1: XLSX.WorkSheet = wb.Sheets[wsname1];
    
          /* grab second sheet */
          const wsname2: string = wb.SheetNames[2];
          const ws2: XLSX.WorkSheet = wb.Sheets[wsname2];
    
          /* save data */
          dataJson1 = XLSX.utils.sheet_to_json(ws1);
          dataJson2 = XLSX.utils.sheet_to_json(ws2);
          console.log(dataJson1);
    
        };
        reader.readAsBinaryString(data);
        console.log(data);
      });
    

    }

    我希望它对你有所帮助,即使它已经很晚了:)

    【讨论】:

      【解决方案2】:

      我建议使用库来解析excel文件。

      查看SheetJs的示例:

      /* <input type="file" (change)="onFileChange($event)" multiple="false" /> */
      /* ... (within the component class definition) ... */
        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}));
          };
          reader.readAsBinaryString(target.files[0]);
        }
      

      【讨论】:

      • 在我的项目中,我使用了这个库。我需要在加载网页的同时打开文件。您的示例仅适用于事件(单击按钮)。
      • 嘿,我在找onooks.com/…也许你也...
      猜你喜欢
      • 2020-03-07
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 2013-10-06
      • 2018-01-19
      相关资源
      最近更新 更多