在Angular中读取excel文件的行号为n的头。

问题描述 投票:0回答:1

我想在Angular中读取一个excel文件,从行号开始。5 作为页眉,并以页眉''读列。colName1', 'colName2',和'。colName3'(如果这么多规格的数据读不出来,那就根据规格取片)。有没有简单的方法?我遇到的所有代码都是使用多个嵌入式脚本来完成工作。

这是我想到的代码。它读取选定的excel,并在控制台中显示它的JSON。它不能处理页眉不在第1行和不读取指定列的文件。

HTML:

<div class="col-md-8 form-group">    
   <input type="file" class="form-control" (change)="uploadedFile($event)" placeholder="Upload file" accept=".xlsx">
</div>

TypeScript:

import { Component, OnInit } from '@angular/core';
import * as XLSX from 'xlsx';  
import * as FileSaver from 'file-saver'; 

@Component({
  selector: 'app-upload',
  templateUrl: './upload.component.html',
  styleUrls: ['./upload.component.css']
})
export class UploadComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
  }
  storeData: any;  
  jsonData: any;    
  fileUploaded: File;  
  worksheet: any;  

  uploadedFile(event) {  
    this.fileUploaded = event.target.files[0];  
    this.readExcel();  
  }  

  readExcel() {  
    let readFile = new FileReader();  
    readFile.onload = (e) => {  
      this.storeData = readFile.result;  
      var data = new Uint8Array(this.storeData);  
      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];  
      this.worksheet = workbook.Sheets[first_sheet_name];  
      this.jsonData = XLSX.utils.sheet_to_json(this.worksheet, { raw: false });  
      this.jsonData = JSON.stringify(this.jsonData);  
      console.log(this.jsonData)
    }  
    readFile.readAsArrayBuffer(this.fileUploaded);  
  }
}

我正在寻找类似Python中pandas提供的行为。

df = pd.read_excel('fileName.xlsx', sheet_name='sheet1', header=5)
df = df[['colName1','colName2', 'colName3']].copy()

我是Angular的新手,还在努力学习Angular的基础知识。

javascript excel angular typescript frontend
1个回答
0
投票

最简单的方法是使用可怕的lib xlsx-import https:/github.comSiemienikxlsx-import。

它可以和TypeScript一起工作,所以对你的Angular应用很有帮助。

interface Book {
    Id: number;
    Title: string;
    Author: string;
}

const importer = new Importer(workbook);
const books: Book[] = importer.GetAllItems<Book>( {
    type: 'list',
    worksheet: 'Favourites',
    columns: [
        {
            index: 1, // column index (1,2,3....n) - started form number 1 (not 0)
            key: 'Id', // output item's field (Book.Id)
            mapper: (v: string) => Number.parseInt(v) // nullable, for transformating values
        },
        {index: 2, key: 'Title'}, // (Book.Title)
        {index: 5, key: 'Author'},  // (Book.Author)
    ],
    rowOffset: 6, //offset header row
}); 
© www.soinside.com 2019 - 2024. All rights reserved.