javascript - 在javascript中上传excel文件并获取对象

标签 javascript

我想上传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构造函数和resolveonload 执行时,得到结果

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/

相关文章:

javascript - 我如何制作一个图像 url 数组,将它们附加到现有数组,并让页面使用 jQuery 加载图像?

javascript - 使用 Javascript/jQuery 动态添加行跨度

javascript - 如何着手更新模块化可视化

javascript - Strongloop 中的授权和身份验证

javascript - 用于查找图像引用的正则表达式

JavaScript - iPad 应用程序中的警报消息

javascript - 在本地使用 MongoDB( Electron )?

javascript - Internet Explorer的 “Autocomplete”函数不触发JavaScript事件

javascript - 如何从一个类中获取按钮内使用的所有类名?

php - 从动态生成的列表在 PHP 网页之间传递数据