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解决办法