IE 11 - 无法解决“对象不支持属性或方法'charCodeAt'”或“对象不支持属性或方法'readAsBinaryString'”

Posted

技术标签:

【中文标题】IE 11 - 无法解决“对象不支持属性或方法\'charCodeAt\'”或“对象不支持属性或方法\'readAsBinaryString\'”【英文标题】: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!");
    


【问题讨论】:

【参考方案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文件时创建一个数组缓冲区,可以使用。

以上是关于IE 11 - 无法解决“对象不支持属性或方法'charCodeAt'”或“对象不支持属性或方法'readAsBinaryString'”的主要内容,如果未能解决你的问题,请参考以下文章

Loadrunner11无法在win7 64位上启用ie解决办法

loadrunner11录制无法打开IE浏览器

axios无法在ie9,10,11环境下运行的问题解决

如何解决swiper3无法在ie9中运行的bug

文档大师 在Win10 IE11下,文档集画面无法正常显示Word等Office文档的解决方法

win11无法在cmd上打开浏览器