我想上传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');
    });

EXCELELFileToJSON

    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);
        }
    }       

问题是,当我运行它时,下面的代码(来自上面的代码)在控制台中使用‘unfined’执行

    var jsonResult  =  excelFileToJSON(files[0]);
        console.log(jsonResult);

然后,我可以看到从exelFileToJSON中的这一行打印的结果.

        console.log(result);

Reader.onLoad有一些问题,它返回未定义的结果,但过了一段时间它就会提供结果.这可能是什么问题.

推荐答案

您需要使用await直到onload函数执行,您可以通过使用Promise构造函数来实现这一点,当onload使用result执行时使用resolve.

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相关问答推荐

TypScript:根据共享属性对项目进行分组并为其分配groupID

IOS(React Native)中未找到模块SquareReaderSDK

如何使用Paged.js仅渲染特定页面

窗口.getComputedStyle()在MutationObserver中不起作用

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

传递一个大对象以在Express布局中呈现

Chrome是否忽略WebAuthentication userVerification设置?""

如何在Obsidian dataview中创建进度条

用JavaScript复制C#CRC 32生成器

Reaction Native中的范围滑块

更改预请求脚本中重用的JSON主体变量- Postman

当标题被点击时,如何使内容出现在另一个div上?

基于产品ID更新条带产品图像的JavaScript命中错误

OnClick更改Json数组JSX中的图像源

使用RxJS from Event和@ViewChild vs KeyUp事件和RxJS主题更改输入字段值

如何找到带有特定文本和测试ID的div?

为什么在运行于<;img>;事件处理程序中的JavaScript中x和y是不可变的?

如何在TransformControls模式下只保留箭头进行翻译?

我怎样才能点击一个元素,并获得一个与 puppeteer 师导航页面的URL?

在Java脚本中构建接口的对象