欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js读取Excel表格,js完成点击复制数据的代码教程

程序员文章站 2023-01-29 17:30:45
废话 项目需求:根据日期读取某个excel的某块区域;,生成数组,点击可复制该数组,另作他用; 根据第几周读取不同的sheet(excel左下角) 周一读取周一的片名,周二读取周二的片名,依次。。...

废话

项目需求:根据日期读取某个excel的某块区域;,生成数组,点击可复制该数组,另作他用;

根据第几周读取不同的sheet(excel左下角) 周一读取周一的片名,周二读取周二的片名,依次。。

excel 内容区域如下图:

js读取Excel表格,js完成点击复制数据的代码教程

最终效果实例:

丑了点:

js读取Excel表格,js完成点击复制数据的代码教程

看整体代码:

必要的备注均有

<html>
<head>
    <meta charset="utf-8">
    <title>readexcel</title>
</head>
<link href="./bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
<script src="https://code.jquery.com/jquery.js"></script>
<script src="./bootstrap/js/bootstrap.min.js"></script>
<body>
<p class="container">
    <select id="selectweek" name="selectweek" onchange="getweekday()">
        <option value="0">第一周</option>
        <option value="1">第二周</option>
        <option value="2">第三周</option>
        <option value="3">第四周</option>
        <option value="4">第五周</option>
    </select>
    <br>
    <select id="selectday" name="selectday" onchange="getweekday()">
        <option value="a">周一</option>
        <option value="c">周二</option>
        <option value="e">周三</option>
        <option value="g">周四</option>
        <option value="i">周五</option>
        <option value="k">周六</option>
        <option value="m">周日</option>
    </select>
    <br>
    <input type="file" onchange="importf(this)" id="file"/>
    <br>
    <textarea cols="20" rows="10" id="textarea"></textarea>
    <br>
    <input type="button" onclick="copy()" value="点击复制代码"/>
</p>
<script type="text/javascript" src="./shim.min.js"></script>
<script type="text/javascript" src="./xlsx.full.min.js"></script>
<script>
    var wb;//读取完成的数据
    var rabs = false; //是否将文件读取为二进制字符串
    var values = [];//最终要的数组数据
    var week = 0;//初始默认定义选取第一周的数据
    var day = 'a';//初始默认定义选取第一天的数据,第一天就是a列。看表;
    var weekday = [];//初始第一周第一天的为空的

    for (var m = 3; m < 100; m++) {//从每一列的第三行开始;看表
        weekday.push(`a${m}`)//初始进入的时候第一周第一天有100条数据,查询a列,从地三行到地100行的数据;放入数组
    }

    function getweekday() {//该方法为获取哪一周哪一天的列表,某天的数据为 一列默认为从第三行到地100行;
        var selectweek = document.getelementbyid('selectweek');//基本操作啦
        var selectday = document.getelementbyid('selectday');//基操啦!
        week = selectweek.value;//获取人工选择的是哪一周
        day = selectday.value;//获取人工选择的是哪一天
        weekday = [];//如果重复操作该页面,为了防止数据增加。所以要初始化该数组;
        for (var j = 3; j < 100; j++) {
            weekday.push(`${day}${j}`)//最终获取该列表对应的格数及位置;以备后用;
        }
    }

    function importf(obj) {//导入文件
        if (!obj.files || obj.files.length <= 0) {//如果onchange事件发生但是未传入文件,那么啥都不干。
            return;
        }
        var f = obj.files[0];//f为读取到的文件
        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'
                });
            }
            //wb.sheetnames[0]是获取sheets中第一个sheet的名字
            //wb.sheets[sheet名]获取第一个sheet的数据
            // var jsontext = json.stringify(xlsx.utils.sheet_to_json(wb.sheets[wb.sheetnames[0]]));
            values = [];
            for (var i = 0; i < weekday.length; i++) {//遍历查找weekday数组中的数据,组成新数据数组得到最终值values
                if (wb.sheets[wb.sheetnames[week]][weekday[i]]) {
                    var cellvalue = wb.sheets[wb.sheetnames[week]][weekday[i]].v;//
                    values.push(`"${cellvalue}"`)
                } else {
                    continue
                }
            }
            // console.log(values);
            var textarea = document.getelementbyid('textarea');
            textarea.value = `[${values}]`
            obj.value = ''
        };
        if (rabs) {
            reader.readasarraybuffer(f);
        } else {
            reader.readasbinarystring(f);
        }
    }

    function fixdata(data) { //文件流转binarystring
        var o = "",
            l = 0,
            w = 10240;
        for (; l < data.bytelength / w; ++l) o += string.fromcharcode.apply(null, new uint8array(data.slice(l * w, l * w + w)));
        o += string.fromcharcode.apply(null, new uint8array(data.slice(l * w)));
        return o;
    }

    function copy() {//这个方法完成复制数据功能
        var textarea = document.getelementbyid('textarea');
        textarea.select(); // 选择对象
        document.execcommand("copy"); // 执行浏览器复制命令
        alert("复制成功");
    }
</script>
</body>
</html>