我无法从角 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]);
}

你应该遵循这 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">
<on type="on" cl="btn btn-info" (click)="Upload()" >Upload</on>
Typescript
//import it
import * as XLSX from 'ts-xlsx';
//inside export cl
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);
}

您可以使用 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 p 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希望这将帮助你或其他人。

此软件包已被弃用:https://www.npmjs.com/package/ts-xlsx
Usehttps://github.com/SheetJS/js-xlsx/.和 TypeScript 或 Angular 5:https://github.com/SheetJS/js-xlsx/tree/master/demos/typescript。
Withimport * as XLSX from 'xlsx';
然后使用答案中的步骤,它完美地工作。

我试过文件上传,下面是我的步骤和结果与数据和标题,
这也将支持 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 p 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。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(71条)