前端导入excel文件

excel导入在管理系统中是必不可少的一项功能,它的实现对于新手来说也是比较复杂;

要想实现excel导入,就必须了解怎么读取excel文件

//www.greatytc.com/p/67c875cb9c32

好了,话不多说,我们开始吧

这个导入功能,我使用了Jexcel.js插件

<script type="text/javascript" src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js" type="text/javascript"></script>
<script src="jexce/dist/js/jquery.csv.min.js"></script> 
<script type="text/javascript" src="js/plugins/layer/laydate/laydate.js"></script>
<script src="https://cdn.bootcss.com/xlsx/0.12.7/xlsx.core.min.js"></script>
<script src="jexce/dist/js/jquery.jexcel.js"></script>
<link rel="stylesheet" href="jexce/dist/css/jquery.jexcel.css" type="text/css" />
<div class="dropdown col-sm-6">
    <input type="file" id="excel-file" onchange="importf(this)"/>
</div>
<div class="col-sm-1">
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#myModal">预览</button>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
     <div class="modal-dialog" role="document">
          <div class="modal-content">
             <div class="modal-body">
                    <label>请选择</label>
                    <select id="sel" name="">
                        
                    </select>
              </div>
                 <div class="modal-footer">   
                     <button id="btnOk" type="button" class="btn btn-primary" data-dismiss="modal">Save changes</button>
                 </div>
            </div>
       </div>
</div>
<div id="my"></div>

第一步:先使用xlsx.js读取excel文件
第二步:把获取的数据转成jexcel需要的数据格式
javascript代码

var wb;//读取完成的数据
var rABS = false; //是否将文件读取为二进制字符串

function importf(obj) {//导入
    if(!obj.files) {
        return;
    }
    var f = obj.files[0];
    var reader = new FileReader();
    reader.onload = function(e) {
        var data = e.target.result;
        if(rABS) {
            wb = XLSX.read(btoa(fixdata(data)), {//手动转化
                type: 'base64'
            });
        } else {
            wb = XLSX.read(data, {
                type: 'binary'
            });
        }

        var snames = wb.SheetNames;//获取所有的sheet表名
        for(var i=0;i<snames.length;i++){
            $("#sel").append('<option value="'+i+'">'+snames[i]+'</option>');
        }
        let excelData = [];
        var seltext;
        $("#btnOk").click(function(){
            seltext=$('#sel option:selected').text();
            //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
            //wb.Sheets[Sheet名]获取第一个Sheet的数据
            excelData= JSON.stringify( XLSX.utils.sheet_to_json(wb.Sheets[seltext]) );
            dataShow (excelData,seltext);
        });
            
        }
    };
    if(rABS) {
        reader.readAsArrayBuffer(f);
    } else {
        reader.readAsBinaryString(f);
    }
}

因为我们有时候导入的excel文件是的多个sheet表的,如果把他们都放到一个页面进行统一展示的话会比较乱,所以我做了一个下拉框,让客户自己预览那张表

var snames = wb.SheetNames;//获取所有的sheet表名
        for(var i=0;i<snames.length;i++){
            $("#sel").append('<option value="'+i+'">'+snames[i]+'</option>');
        }
        let excelData = [];
        var seltext;
        $("#btnOk").click(function(){
            seltext=$('#sel option:selected').text();
            //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
            //wb.Sheets[Sheet名]获取第一个Sheet的数据
            excelData= JSON.stringify( XLSX.utils.sheet_to_json(wb.Sheets[seltext]) );
            dataShow (excelData,seltext);
        });
b2.PNG

下面的这段代码是我为了符合jexcel进行的一系列格式转化

function dataShow (persons,selname) {
            console.log(persons);
            var allRow=[],
            allCol=[],
            arr=[],
            objData=eval(persons);
            var num2;
            for(var i=1,j=0;i<objData.length;i++,j++){ 
                if(objData[i][selname]!=null){
                    if((objData[i][selname]).replace(/\s/ig,'')=="项目"){//去除所有空格,然后进行判断
                        arr[j] ={};
                    allCol.push(objData[i][selname]);
                    for(var key in objData[i]){
                        if(key!=selname){
                            arr[j]['text']=objData[i][key];
                        }
                        if(arr[j]['text']!=undefined){
                            allCol.push(arr[j]['text']);
                        }
                    }
                    num2=i;
                    }
                }
                if(i>=num2){
                    allRow[j]=[];
                    arr={}; //js中二维数组必须进行重复的声明,否则会undefind  
                    allRow[j].push(objData[i][selname]);
                    for(var key in objData[i]){
                        if(key!=selname){
                            arr['text'+[j]]=objData[i][key];
                        }
                        if(arr['text'+[j]]!=undefined){
                            allRow[j].push(arr['text'+[j]]);
                        }
                    }
                }
            }

下面的代码就是jexcel.js使用了,想更多的了解jexcel.js
就找:https://bossanova.uk/jexcel

$('#my').jexcel({
                data:allRow,
                colHeaders:allCol,
                csvHeaders :true ,
                tableOverflow :true ,
                tableHeight:'450px',
                colWidths:colW(),
            });
            function colW(){
                let col=[];
                for(var m=0;m<allRow.length;m++){
                    col.push(60);
                }
                return col;
            }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容