JQuery纯前端导入Excel文件,兼容IE10及IE9版本以下浏览器处理方法


代码:

var wb;//读取完成的数据
function importf(obj) {//导入
//判断FileReader是否存在,FileReader是实现纯前端导入的必要方法
if (typeof (FileReader) != "undefined") {
//判断是否可以使用readAsBinaryString,IE10浏览器没有的情况下用readAsArrayBuffer,手动将文件流转二进制字符串(fixdata方法在下方)
if (!FileReader.prototype.readAsBinaryString) {
var f = obj.files[0];
var reader = new FileReader();
reader.onload = function (e) {
var data = e.target.result;
wb = XLSX.read(btoa(fixdata(data)), {
type: 'base64'
});
//此处showImportVehicles是我接下来展示数据的方法,红色部分可拿到Excel中第一列的具体数值,其他列自然也可以容易获取
window.parent.page
.showImportVehicles(JSON.stringify(XLSX.utils
.sheet_to_csv(wb.Sheets[wb.SheetNames[0]])));
};
reader.readAsArrayBuffer(f);
} else {
//不需要兼容IE10及以下版本浏览器时可用readAsBinaryString
var f = obj.files[0];
var reader = new FileReader();
reader.onload = function (e) {
var data = e.target.result;
wb = XLSX.read(data, {
type: 'binary'
});
window.parent.page.showImportVehicles(JSON.stringify(XLSX.utils.sheet_to_csv(wb.Sheets[wb.SheetNames[0]])));
};
reader.readAsBinaryString(f);
}
} else {
//IE9及以下版本浏览器,没有FileReader方法时,无法实现纯前端导入Excel,这时在后端获取文件内容再返回前端,更加方便快捷
$.ajaxFileUpload
({
url: "/etims-track/track/importVehicles",
secureuri: false,
fileElementId: 'excelFile',
timeout: 600000,
success: function (data) {
var str = data.body.innerHTML;//获取返回的字符串
window.parent.page.showImportVehicles(str);
},
error: function (data, status, e) {
}
})
}

}

function fixdata(data) { //文件流转BinaryString
var o = "";
var bytes = new Uint8Array(data);
for (var i = 0; i < data.byteLength; i++) {
o += String.fromCharCode(bytes[i]);
}
return o;
}

注:兼容IE9及以下版本使用ajaxFileUpload向后端传文件的兼容处理:

在ajaxfileupload.js文件中有这样一段代码:
if(window.ActiveXObject) {
if(jQuery.browser.version=="9.0" || jQuery.browser.version=="10.0"){
var io = document.createElement('iframe');
io.id = frameId;
io.name = frameId;
}else if(jQuery.browser.version=="6.0" || jQuery.browser.version=="7.0" || jQuery.browser.version=="8.0"){
var io = document.createElement('