js读取Excel表格,js完成点击复制数据的代码教程
程序员文章站
2023-01-29 17:30:45
废话
项目需求:根据日期读取某个excel的某块区域;,生成数组,点击可复制该数组,另作他用;
根据第几周读取不同的sheet(excel左下角) 周一读取周一的片名,周二读取周二的片名,依次。。...
废话
项目需求:根据日期读取某个excel的某块区域;,生成数组,点击可复制该数组,另作他用;
根据第几周读取不同的sheet(excel左下角) 周一读取周一的片名,周二读取周二的片名,依次。。
excel 内容区域如下图:
最终效果实例:
丑了点:
看整体代码:
必要的备注均有
<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>