前端页面选择excel文件解析成json对象

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]);
}



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值