• JS读取xlsx,然后显示数据,点击一行获取相关数据


    1.首先用的js-xlsx插件,网上下载相关插件

    2.下载JQ插件

    3.显示展示如下图

    JS和HTML代码

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title></title>
        </head>
        <body>
            <input type="file" onchange="importf(this)" />
            <table id="demo">
        </body>
    </html>
    <script lang="javascript" src="dist/xlsx.full.min.js"></script>
    <script src="dist/jquery-3.1.1.min.js"></script>
    <script>
        /*
        FileReader共有4种读取方法:
        1.readAsArrayBuffer(file):将文件读取为ArrayBuffer。
        2.readAsBinaryString(file):将文件读取为二进制字符串
        3.readAsDataURL(file):将文件读取为Data URL
        4.readAsText(file, [encoding]):将文件读取为文本,encoding缺省值为'UTF-8'
        */
        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) {
                if(rABS) {
                    wb = XLSX.read(btoa(fixdata(e.target.result)), {//手动转化
                        type: 'base64'
                    });
                } else {
                    wb = XLSX.read(e.target.result, {
                        type: 'binary'
                    });
                }
                //wb.SheetNames[0]是获取Sheets中第一个Sheet的名字
                //wb.Sheets[Sheet名]获取第一个Sheet的数据
                var data = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
                console.log(data);
                var keyAry = [];
                // 遍历json对象,获取每一列的键名
                for(var key in data[1]){
                    keyAry.push(key);
                }
                // 清除上次渲染的表格
                $("#demo").empty();
                // 设置表格头
                $(`<thead><tr><th>${keyAry[0]}</th><th>${keyAry[1]}</th><th>${keyAry[2]}</th><th>${keyAry[3]}</th></tr></thead>`).appendTo($("#demo"));
                for(var d of data){
                    // 通过循环,每有一条数据添加一行表格
                    var tr = $("<tr onclick='liClick(this)'></tr>");
                    for(var n = 0;n< keyAry.length;n++){
                        var className1=""
                        // 根据keyAry数组的长度,创建每一行表格中的td
                        if(keyAry[n]=="编号"){
                             className1="order"
                        }else if(keyAry[n]=="姓名"){
                             className1="name"
                        }else if(keyAry[n]=="手机号"){
                             className1="iphone"
                        }else if(keyAry[n]=="Id"){
                             className1="id"
                        };
                        
                        $("<td></td>").html("<input>").addClass(className1).appendTo(tr);
                    }
                    // 遍历对象,根据键名找到是哪一列的数据,给对应的td添加内容
                    for(k in d){
                        // (tr[0].children[keyAry.indexOf(k)])
                        $(tr[0].children[keyAry.indexOf(k)]).html(d[k]);
                    }
                    tr.appendTo($("#demo"));
                }
            }
            if(rABS) {
                reader.readAsArrayBuffer(f);
            } else {
               reader.readAsBinaryString(f);
            }
        }
        
        function fixdata(data) { //文件流转BinaryStrings
            var o = "",
            l = 0,
            w = 10240;
            jsArry=[];
            for(; l < data.byteLength / w; ++l) jsArry.push(String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w))));
            return jsArry;
        }
      function liClick(obj,event){
          var div=$(obj.innerHTML);
          var iphone=div.filter(".iphone").text();
          console.log(iphone)
      }
    </script>
  • 相关阅读:
    苹果是如何做到快速发货的?
    亚马逊危险了!面临创业公司和科技巨头的颠覆
    We are writing to let you know we have removed your selling privileges
    亚马逊获20亿美元信用额度:有助新业务投资
    亚马逊与美国邮政合作试营快递生鲜服务
    2013下半年(11月)信息系统项目管理师考试题型分析(综合知识、案例分析、论文)
    SQL Server Profiler参数说明
    SQL2005查询所有表的大小
    SQL中EXISTS的用法和效率
    在线生成APK
  • 原文地址:https://www.cnblogs.com/binmengxue/p/12706598.html
Copyright © 2020-2023  润新知