【问题标题】:IE 11 - Can not solve "Object doesn't support property or method 'charCodeAt'" OR "Object doesn't support property or method 'readAsBinaryString'"IE 11 - 无法解决“对象不支持属性或方法'charCodeAt'”或“对象不支持属性或方法'readAsBinaryString'”
【发布时间】:2019-07-05 09:41:12
【问题描述】:

我正在使用 xlsx.core.min.js 将 excel 文件上传到 SP 并将其内容传递到新列表。我让它在 Edge 中运行,但它在 IE 11 中无法运行。

我收到的第一个控制台错误是“对象不支持属性或方法'charCodeAt'”

我阅读了 .readAsArrayBuffer() 的兼容性问题并将其替换。然后我开始收到错误“对象不支持属性或方法'readAsBinaryString'”

**注意:仅使用 .readAsArrayBuffer() 会导致原始的 'charCodeAt' 控制台错误 **

我怎样才能让这段代码正常工作?提前谢谢!

function ExportToTable() {
            var regex = /^([a-zA-Z0-9\s_\\.\-:])+(.xlsx|.xls)$/;
            /*Checks whether the file is a valid excel file*/
            if (regex.test($("#excelfile").val().toLowerCase())) {
                var xlsxflag = false; 
     /*Flag for checking whether excel is .xls format or .xlsx format*/
            if ($("#excelfile").val().toLowerCase().indexOf(".xlsx") > 0) {
            xlsxflag = true;
        }
        /*Checks whether the browser supports HTML5*/
        if (typeof (FileReader) != "undefined") {
            var reader = new FileReader();
            reader.onload = function (e) {
                var data = e.target.result;
                /*Converts the excel data in to object*/
                if (xlsxflag) {
                    var workbook = XLSX.read(data, { type: 'binary' });
                }
                else {
                    var workbook = XLS.read(data, { type: 'binary' });
                }
                /*Gets all the sheetnames of excel in to a variable*/
                var sheet_name_list = workbook.SheetNames;

                var cnt = 0; /*This is used for restricting the script to consider only first sheet of excel*/
                sheet_name_list.forEach(function (y) { /*Iterate through all sheets*/
                    /*Convert the cell value to Json*/
                    if (xlsxflag) {
                        var exceljson = XLSX.utils.sheet_to_json(workbook.Sheets[y]);
                    }
                    else {
                        var exceljson = XLS.utils.sheet_to_row_object_array(workbook.Sheets[y]);
                    }
                    //alert (exceljson.length + " ----" + cnt);
                    if (exceljson.length > 0 && cnt == 0) {
                        BindTable(exceljson, '#exceltable');
                        cnt++;
                    }
                });
                $('#exceltable').show();
            }
            if (xlsxflag) {/*If excel file is .xlsx extension than creates a Array Buffer from excel*/
                reader.readAsArrayBuffer($("#excelfile")[0].files[0]);
            }
            else {
                reader.readAsBinaryString($("#excelfile")[0].files[0]);
            }
        }
        else {
           // alert("Sorry! Your browser does not support HTML5!");
       }
    }
    else {
       // alert("Please upload a valid Excel file!");
    }

}

【问题讨论】:

    标签: internet-explorer binary cross-browser blob compatibility


    【解决方案1】:

    尝试参考以下代码读取.xlsx文件

    document.getElementById('file-object').addEventListener("change", function(e) {
      var files = e.target.files,file;
      if (!files || files.length == 0) return;
      file = files[0];
      var fileReader = new FileReader();
      fileReader.onload = function (e) {
        var filename = file.name;
        // pre-process data
        var binary = "";
        var bytes = new Uint8Array(e.target.result);
        var length = bytes.byteLength;
        for (var i = 0; i < length; i++) {
          binary += String.fromCharCode(bytes[i]);
        }
        // call 'xlsx' to read the file
        var oFile = XLSX.read(binary, {type: 'binary', cellDates:true, cellStyles:true});
      };
      fileReader.readAsArrayBuffer(file);
    });
    

    更多详情,请查看this article

    【讨论】:

    • 我会用这个替换我的代码还是将它添加为 polyfill?请发送完整的答案
    • 以上代码用于读取.xlsx文件,如果你想在上传.xlsx文件时创建一个数组缓冲区,可以使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    相关资源
    最近更新 更多