纯js实现随机点名案例
2020-06-28 05:00
162 查看
纯js实现随机点名案例
页面参考
- 未加载Excel名单表
- 加载Excel表
- 开始启动
- 停止
流程图
代码编写
- 导入js库
-
js-xlsx
由SheetJS出品的
js-xlsx
是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls
、xlsx
、ods
(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx
格式为例。
下载地址:
-
jquery官网下载地址:https://jquery.com/download/
-
js-xlsx:https://github.com/SheetJS/js-xlsx
-
代码实现
<!DOCTYPE html> <html> <head> <title>js读取Excel文件</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style> table td { border: 1px solid black; width: 70px; text-align: center; } </style> </head> <body class="Body noover"> <h4>上传你要生成名单Excel表</h4> <input type="file" id="file" /><br> <br> <button id="createList">点击生成</button> <!-- 名单表div --> <div style="width: 800px; height: 600px; margin-left: 350px; margin-top: -100px;"> <h3 style="text-align: center;">点名系统</h3> <div> <table id="roster" cellspacing="20"> <!-- 生成的名单内容 --> </table> </div> </div> <!-- 按钮div --> <div style="float: right; margin-top: -600px; margin-right: 100px;"> <button disabled="true" id="start">开始</button> <button disabled="true" id="stop">停止</button> </div> </body> <script src="js/jquery-3.3.1.min.js"></script> <script src="https://blog-static.cnblogs.com/files/xieyongbin/xlsx.full.min.js"></script> <script type="text/javascript"> //定义一个名字数组,用来存放从Excel表中获取的名字数据 var names = []; //循环定时器的唯一标识 var timerFor; //一次性定时器唯一标识 var timerOnce; //文件上传框改变事件 e:代表改变事件 $("#file").change(function (e) { //从事件中获取到input元素 let input = e.target; //获取input元素中的files属性,获取上传的文件,返回的是一个文件数组 let files = input.files; //判断文件数据中是否有数据 if (files.length == 0) { //没有数据,提示用户 alert("请选择要上传的文件"); return; } //因为我们一次只上传一个Excel文件,所有获取数组的0索引,就能获取上传的文件 let file = files[0]; //获取上传文件的名字 let fileName = file.name; //截取字符串,获取上传文件的后缀名 let subStr = fileName.substring(fileName.indexOf(".") + 1); //判断后缀名是否为xlsx类型 if (subStr != "xlsx") { alert("上传文件只能为.xlsx类型的Excel表!"); return; } //创建文件读取对象 var reader = new FileReader(); //按字节读取文件内容,结果为文件的二进制串格式,读取到的数据储存reader对象的result属性中 reader.readAsBinaryString(file); //读取成功时调用的事件, e代表的就是一个event,也就是一个事件,读取文件的整个过程就是一个事件,可以在此对象中获取读取到的数据 reader.onload = function (e) { //获取对象中读取到的数据,this代表reader对象 let data = this.result; //使用xlsx工具库将获取的禁止数据解析为excel格式,参数1:要解析的数据, 参数二:指定什么格式读取。 //返回一个工作簿对象 let WorkBook = XLSX.read(data, { type: "binary" }); //调用解析工作簿的函数 parseWorkBook(WorkBook); } }) //解析Excel工作簿函数 /* 工作簿就相当于一个笔记本(纸质),里面包含了该笔记本的所属人,以及整个笔记本所写的数据,都在这个工作簿对象中。 而我们上传的Excel表,就相当于笔记本中的一页。 我们需要的数据,就在这一页的每个表格中。 */ function parseWorkBook(WorkBook) { //从工作簿对象中获取所有的Excel表 let sheets = WorkBook.Sheets; //从所有的Excel表中获取第一个表,因为我们一次也只能上传一个Excel表 let sheet = sheets.Sheet1; //使用XLSX.utils工具类的方法,获取表中的单元格的数据,将表格转化为json对象 let dataJ = XLSX.utils.sheet_to_json(sheet); //遍历获取的json格式数据 for (let i = 0; i < dataJ.length; i++) { //获取遍历出的每个元素的姓名;注意:以下的'姓名'属性,是Excel表中的第一行单元格的值如A1、B1 let name = dataJ[i].姓名; // console.log(name); //存入names数组 names[i] = name; } } //加载名单函数 function loadNameList() { //获取数组的长度,判断用户所上传的Excel表中是否有数据名单 if (names.length == 0) { alert("所选名单没有可用数据!"); return; } //我的div大小一排最多能放9个,所以要计算生成多少个tr, 向上取整 let trNum = Math.ceil(names.length / 9); //获取table元素 let table = document.getElementById("roster"); //定义一个索引变量,用来控制取names数组中的名字,这里不能设置为0,因为0 % 9 == 0,为了方便直接从1开始 var index = 1; //循环生成tr for (let i = 0; i < trNum; i++) { //创建tr元素 let tr = document.createElement("tr"); //遍历names数组,获取每个名字 for (index; index <= names.length; index++) { // console.log(names[index - 1]); //创建td元素 let td = document.createElement("td"); //设置td元素的文本,因为index初始值等于1,取不到0号元素,所以这里为了获取0号索引的元素,要进行-1 td.innerText = names[index - 1]; //设置td元素的id td.setAttribute("id", index); //将td元素挂载到tr元素中 tr.appendChild(td); //判断index是不是9的倍数,因为一行只能放9个td,如果是9的倍数的时候,就要换行 if (index % 9 == 0) { //取余弹出后,index要加1,索引指向的元素要往后移动一位 index++; //跳出循环 break; } } //将tr挂载到table中 table.appendChild(tr); } //显示加载完成后,清空文件input框所选内容 document.getElementById("file").value = ""; } //点击生成按钮的单击事件 $("#createList").click(function () { //清空表格数据 $("#roster").html(""); //调用加载名单函数 loadNameList(); //开始按钮可用,停止按钮不可用 document.getElementById("start").disabled = false; document.getElementById("stop").disabled = true; }); //开始按钮单击事件 $("#start").click(function () { //开始按钮不可用,停止按钮可用 document.getElementById("start").disabled = true; document.getElementById("stop").disabled = false; //清空表格数据 $("#roster").html(""); //调用重新加载名单函数 loadNameList(); //创建循环定时器(上色) timerFor = window.setInterval(function () { //获取随机的id数,参数为名字数组的长度 let id = randomId(names.length); //根据随机的id,获取相应的元素 $("#" + id).css("background", "red"); //创建一次性定时器(清除色),在上完色1秒后清除颜色 timerOnce = window.setTimeout(function () { $("#" + id).css("background", "white"); }, 100); }, 100); //两个定时器互不干扰,你该上色上色,我在你上完色之后等待一定时间,该清除就清除! }); //生成[1,max]范围的整数,用于匹配每个td的id值 function randomId(max) { return Math.ceil(Math.random() * max); } //创建停止按钮单击事件 $("#stop").click(function () { //开始按钮可用,停止按钮不可用 document.getElementById("start").disabled = false; document.getElementById("stop").disabled = true; //使用定时器的唯一标识,清除循环定时器。 window.clearInterval(timerFor); window.clearTimeout(timerOnce); }); </script> </html>
注意事项
- 对于要导入的Excel有要求
- 在编写的课程中可以将获取到的工作簿对象,Excel表对象使用
console.log()
输出查看
结束
相关文章推荐
- JS简洁代码实现随机课堂点名
- js实现随机点名小功能
- 原生JS实现随机点名项目的实例代码
- 用js实现一个随机点名
- js实现随机点名系统(实例讲解)
- JS实现课堂随机点名和顺序点名
- js随机点名 方式 和 js生成随机数 案例
- 原生js 实现随机点名系统
- js实现随机点名
- js实现随机点名功能
- js实现课堂随机点名系统
- 利用原生js实现随机点名
- js实现随机点名程序
- JS实现的随机点名的模型
- JS-案例-随机点名
- JS+CSS实现随机点名(实例代码)
- JS实现随机点名系统
- JS加强总结第二天(实现select的全选和反选不选的操作 案例)
- javascript网页随机点名实现过程解析
- JS实现的随机排序功能算法示例