角4:如何从Excel中读取数据

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

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

HTML代码:

<input id="my-file-selector" type="file" (change)="uploadData($event)" name="uploadExcel">
upload.component.ts:
public uploadData(event: any) : void { 
    // get data from file upload       
    let filesData = event.target.files;
    console.log(filesData[0]);
}
39

你应该遵循这 3 个步骤

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

步骤 2:使用 FileReader 转换为 arraybuffer

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

HTML CODE
<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>
Typescript
//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);
}
33

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

只需按照以下步骤操作:

1)npm install--save xlsx

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

import * as XLSX from 'xlsx';

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
    };
 }

您还可以参考这些实用程序方法存在于 xlsx 根据您的需要执行不同的操作。

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

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

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

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

https://github.com/SheetJS/sheetjs

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

24

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

Usehttps://github.com/SheetJS/js-xlsx/.

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

Withimport * as XLSX from 'xlsx';

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

4

我试过文件上传,下面是我的步骤和结果与数据和标题,

这也将支持 Excel 工作表中的多个工作表,

1.npm install --save xlsx
    
2.import * as XLSX from 'xlsx';
3.HTML Code:
<input type="file" (change)="onFileChange($event)">
4.Angular Typescript:
  exceltoJson = {};
  onFileChange(event: any) {
    this.exceltoJson = {};
    let headerJson = {};
    /* 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]);
    console.log("filename", target.files[0].name);
    this.exceltoJson['filename'] = target.files[0].name;
    reader.onload = (e: any) => {
      /* create workbook */
      const binarystr: string = e.target.result;
      const wb: XLSX.WorkBook = XLSX.read(binarystr, { type: 'binary' });
      for (var i = 0; i < wb.SheetNames.length; ++i) {
        const wsname: string = wb.SheetNames[i];
        const ws: XLSX.WorkSheet = wb.Sheets[wsname];
        const data = XLSX.utils.sheet_to_json(ws); // to get 2d array pass 2nd parameter as object {header: 1}
        this.exceltoJson[`sheet${i + 1}`] = data;
        const headers = this.get_header_row(ws);
        headerJson[`header${i + 1}`] = headers;
        //  console.log("json",headers)
      }
      this.exceltoJson['headers'] = headerJson;
      console.log(this.exceltoJson);
    };
  }
  get_header_row(sheet) {
    var headers = [];
    var range = XLSX.utils.decode_range(sheet['!ref']);
    var C, R = range.s.r; /* start in the first row */
    /* walk every column in the range */
    for (C = range.s.c; C <= range.e.c; ++C) {
      var cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })] /* find the cell in the first row */
      // console.log("cell",cell)
      var hdr = "UNKNOWN " + C; // <-- replace with your desired default 
      if (cell && cell.t) {
        hdr = XLSX.utils.format_cell(cell);
        headers.push(hdr);
      }
    }
    return headers;
  }
5.Result
{filename: "uploadedexcel.xlsx", sheet1: Array(212), sheet2: Array(8), headers: {…}}

结果保存上传的 excel 名称,sheet1 和 sheet2 中的数据以及 sheet1 和 sheet2 中的标题。

上传的 excel 表格有 sheet1 和 sheet2。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(289)
返回的 mac地址对于不同的设备是相同的
上一篇
如何使用CSS在HTML中定位元素
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(31条)