Typescript Angular 6读取XLS文件并将其保存到变量中
我一直在尝试读取XLS文件并将其保存到局部变量中以便于使用,但我不断地得到Typescript Angular 6读取XLS文件并将其保存到变量中,typescript,jxls,Typescript,Jxls,我一直在尝试读取XLS文件并将其保存到局部变量中以便于使用,但我不断地得到 TypeError: Cannot set property 'songs' of undefined 我从来没有尝试过读取XLS之前只有csv的,这是容易得多,但不幸的是,文件无法转换 这是当前正在使用的代码: public songs; readFile(which_file: string) { this.actuallyReadFile().then((data) => { va
TypeError: Cannot set property 'songs' of undefined
我从来没有尝试过读取XLS之前只有csv的,这是容易得多,但不幸的是,文件无法转换
这是当前正在使用的代码:
public songs;
readFile(which_file: string) {
this.actuallyReadFile().then((data) => {
var workbook = XLSX.read(data, {
type: 'binary'
});
workbook.SheetNames.forEach(function (sheetName) {
console.log(XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]));
this.songs = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
})
})
}
actuallyReadFile() {
var reader = new FileReader();
return new Promise((resolve, reject) => {
reader.onload = function (e) {
resolve(reader.result);
};
reader.onerror = function (ex) {
console.log(ex);
};
reader.readAsBinaryString(this.file);
});
}
我也尝试过先串接对象,但仍然会导致相同的错误。我不确定它是否有效,但您可以尝试以下方法: 添加此行:
var ref = this;
之前:
workbook.SheetNames.forEach(function (sheetName) {
console.log(XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]));
// add use ref.songs and then try
ref.songs = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
})
最终代码:
var ref = this;
workbook.SheetNames.forEach(function (sheetName) {
console.log(XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]));
// add use ref.songs and then try
ref.songs = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
})
如果它不适合您,请提供一个StackBlitz示例 我通过删除forEach循环来解决问题:
this.songs = <any>XLSX.utils.sheet_to_row_object_array(workbook.Sheets[workbook.SheetNames[0]]);
this.songs=XLSX.utils.sheet_to_row_object_数组(workbook.Sheets[workbook.SheetNames[0]);
另一个有效的方法是在所说的forEach循环外生成一个temp变量,然后将
this.songs
赋值给该变量。我不知道为什么我必须这样做,但至少它起作用了,我只需要第一张表。我想它的问题与这个
有关,你是否尝试将值直接分配给console,而不是分配给局部变量?在该行的正上方有一个console日志,它会输出json数组,将其引用存储到一个变量中,并使用它,如var ref=this
和ref.song=yourvalue
@amedeios添加了一个答案,请检查!是的,它仍然给了我设置song为null的错误,我认为这与循环和作用域有关