我想上传ecel读取的内容并将这些内容添加到数据表中。
这就是我尝试使用此引用 https://javacodepoint.com/convert-excel-file-data-to-json-in-javascript/ 进行的操作
$('#uploadFile').on('click', async function () {
var files = document.getElementById('stocksform').files;
if(files.length==0){
alert("Please choose any file...");
return;
}
var filename = files[0].name;
var extension = filename.substring(filename.lastIndexOf(".")).toUpperCase();
if (extension == '.XLS' || extension == '.XLSX') {
var jsonResult = excelFileToJSON(files[0]);
console.log(jsonResult);
}else{
alert("Please select a valid excel file.");
}
$('#exampleModal').modal('toggle');
});
excelFileToJSON
function excelFileToJSON(file){
try {
var reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type : 'binary'
});
var result = {};
workbook.SheetNames.forEach(function(sheetName) {
var roa = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
if (roa.length > 0) {
result[sheetName] = roa;
}
});
console.log(result);
return result ;
}
}catch(e){
console.error(e);
}
}
问题是当我运行它时,下面的代码(来自上面的代码)在控制台中以“未定义”执行
var jsonResult = excelFileToJSON(files[0]);
console.log(jsonResult);
之后我可以看到从 excelFileToJSON 内的这一行打印的结果。
console.log(result);
reader.onload 存在一些问题,它返回 undefined,但一段时间后它会提供结果。可能是什么问题。
最佳答案
您需要使用await
直到onload
函数执行,您可以通过使用Promise
构造函数和resolve
当 onload
执行时,得到结果
。
function excelFileToJSON(file) {
var reader = new FileReader();
reader.readAsBinaryString(file);
return new Promise((resolve, reject) => {
reader.onload = function (e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type: "binary",
});
var result = {};
workbook.SheetNames.forEach(function (sheetName) {
var roa = XLSX.utils.sheet_to_row_object_array(
workbook.Sheets[sheetName]
);
if (roa.length > 0) {
result[sheetName] = roa;
}
});
resolve(result);
};
});
}
async function executor() {
var jsonResult = await excelFileToJSON(files[0]);
console.log(jsonResult);
}
关于javascript - 在javascript中上传excel文件并获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76362180/