Angular 4:如何从Excel读取数据?

alo*_*mar 14 typescript angular

我无法从Angular 4中Excel工作表中获取数据.下面是我的代码示例.

HTML代码:

<input id="my-file-selector" type="file" (change)="uploadData($event)" name="uploadExcel">
Run Code Online (Sandbox Code Playgroud)

upload.component.ts:

public uploadData(event: any) : void { 
    // get data from file upload       
    let filesData = event.target.files;
    console.log(filesData[0]);
}
Run Code Online (Sandbox Code Playgroud)

小智 28

你应该遵循这3个步骤

第1步:导入ts-xlsx参考:https://www.npmjs.com/package/ts-xlsx进行安装

第2步:使用FileReader转换为arraybuffer

第3步:使用XLSX读取arraybuffer并转换为工作簿

HTML代码

<input type="file" style="display: inline-block;" (change)="incomingfile($event)" placeholder="Upload file" accept=".xlsx">
<button type="button" class="btn btn-info" (click)="Upload()" >Upload</button>
Run Code Online (Sandbox Code Playgroud)

打字稿

//import it

    import * as XLSX from 'ts-xlsx';

//inside export class

arrayBuffer:any;
file:File;
incomingfile(event) 
  {
  this.file= event.target.files[0]; 
  }

 Upload() {
      let fileReader = new FileReader();
        fileReader.onload = (e) => {
            this.arrayBuffer = fileReader.result;
            var data = new Uint8Array(this.arrayBuffer);
            var arr = new Array();
            for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
            var bstr = arr.join("");
            var workbook = XLSX.read(bstr, {type:"binary"});
            var first_sheet_name = workbook.SheetNames[0];
            var worksheet = workbook.Sheets[first_sheet_name];
            console.log(XLSX.utils.sheet_to_json(worksheet,{raw:true}));
        }
        fileReader.readAsArrayBuffer(this.file);
}
Run Code Online (Sandbox Code Playgroud)


Ama*_*pta 17

您可以使用 npm 中的 SheetJs/xlsx 包从 excel 中获取数据作为 Angular/Ionic 中的 json 对象。

只需按照以下步骤操作:

1) npm install --save xlsx

2)现在在您的组件文件中导入 xlsx

import * as XLSX from 'xlsx';
Run Code Online (Sandbox Code Playgroud)

3)现在在类型文件的输入标签的更改事件中附加此功能

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

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

      /* save data */
      const data = XLSX.utils.sheet_to_json(ws); // to get 2d array pass 2nd parameter as object {header: 1}
      console.log(data); // Data will be logged in array format containing objects
    };
 }
Run Code Online (Sandbox Code Playgroud)

您还可以参考 xlsx 中的这些 utils 方法,根据需要执行不同的操作。

https://github.com/SheetJS/sheetjs#utility-functions

而且在读取操作期间,您可以在对象内部传递这些解析选项

https://github.com/SheetJS/sheetjs#parsing-options

有关任何其他信息,请参阅文档

https://github.com/SheetJS/sheetjs

希望这会帮助你或其他人。


小智 12

此软件包已弃用:https://www.npmjs.com/package/ts-xlsx

使用https://github.com/SheetJS/js-xlsx/.

TypeScript或Angular 5:https://github.com/SheetJS/js-xlsx/tree/master/demos/typescript.

import * as XLSX from 'xlsx';

然后使用答案中的步骤,它完美地工作.