1.依赖js文件:xlsx.core.min.js
2.html:<input class="uploadBtn" type="button" id="excelbtn" name="excelbtn" style="width:114px;" value="导入明细"/>
3.js代码
//解析excel
$('#excelbtn').click(function(){
crateForm3($(this),'excelFile');
});
//excel上传并解析
function crateForm3(that,name){
var input2 = document.createElement("input");
input2.type = "file";
input2.setAttribute('accept','application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//文件格式只接受
input2.setAttribute("name",name);
input2.setAttribute("style","display:none");
//表单文本域change事件
input2.onchange = function(e) {
var fileList = this.files;
var value= fileList[0].name;
var value1 = value.substring(value.lastIndexOf(".")+1,value.length);
if(value.indexOf('@') !=-1 || value.indexOf('#') !=-1 || value.indexOf('¥') !=-1 || value.indexOf('%') !=-1 || value.indexOf('&') !=-1
|| value.indexOf('*') !=-1 || value.indexOf('<') !=-1 || value.indexOf('>') !=-1 || value.indexOf('+') !=-1 ){
//文件名称不能包含特殊符号@#¥%&*<>+
$.messager.alert('提示信息', '上传的文件名称不能包含特殊符号@#¥%&*<>+', 'warning');
return;
}else if(value1 != 'xls' && value1 != 'xlsx'){
$.messager.alert('提示信息', '只能选择xls、xlsx格式的文件', 'info');
return false;
}else{
var txt = $('<span>'+value+'</span>');
that.next('div').append(txt);
//把文件传输到后台解析并返回到前端
loadExcel(e,that);
}
};
//之前初始化的给删除
that.next('div').children().remove();
that.next('div').append(input2);
input2.click();
};
function loadExcel(e,that){
var files = e.target.files;
var fileReader = new FileReader();
fileReader.onload = function(ev) {
try {
var data = ev.target.result,
workbook = XLSX.read(data, {
type: 'binary'
}), // 以二进制流方式读取得到整份excel表格对象
persons = []; // 存储获取到的数据
} catch (e) {
console.log('文件类型不正确');
return;
}
// 表格的表格范围,可用于判断表头是否数量是否正确
var fromTo = '';
// 遍历每张表读取
for (var sheet in workbook.Sheets) {
if (workbook.Sheets.hasOwnProperty(sheet)) {
fromTo = workbook.Sheets[sheet]['!ref'];
console.log(fromTo);
persons = persons.concat(XLSX.utils.sheet_to_json(workbook.Sheets[sheet]));
// break; // 如果只取第一张表,就取消注释这行
}
}
if(persons.length){
// var len = Object.getOwnPropertyNames(persons[0]).length;//属性个数
var flag = false;
//做一个模板验证
var obj = persons[0];
if(obj.hasOwnProperty('物料类别')&&obj.hasOwnProperty('实物名称')&&obj.hasOwnProperty('型号')
&&obj.hasOwnProperty('申请数量')&&obj.hasOwnProperty('单位')){
flag = true;
}
if(flag){
exceladd(persons);//解析数据
console.log(persons);//json对象集合
}else{$.messager.alert('提示信息', '导入的excel模板不正确或者数据不完整', 'warning');
}
}else{
$.messager.alert('提示信息', '导入的excel没有数据', 'warning');
}
};
// 以二进制方式打开文件
fileReader.readAsBinaryString(files[0]);
}