我想在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的基础知识。
最简单的方法是使用可怕的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
});