Javascript 实现 Excel 导入生成图表功能

Javascript 实现 Excel 导入生成图表功能

怎么样?如果看了心动的话,就接着往下看吧。 本次的这个设计需要用到几个插件:jquery.js、xlsx.js、echarts.js,大家需要提前进行下载,之后新建demo.html,demo.js,style.css文件,然后新建一个你想要操作的EXCEL文件,我这里的例子是这样的:

Javascript 实现 Excel 导入生成图表功能

好了,先看HTML代码,引入js,然后使用div布局,代码如下:

<head> <meta charset="UTF-8"> <meta content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Excel图表生成工具</title> <link href="https://www.jb51.net/css/style.css"> <script src="https://www.jb51.net/js/jquery.min.js"></script> <script src="https://www.jb51.net/js/xlsx.full.min.js"></script> <script src="https://www.jb51.net/js/echarts.min.js"></script> <script src="https://www.jb51.net/js/demo.js"></script> </head> <body> <div> <div> <h1>Excel图表生成工具</h1> </div> <div> <input type="text" placeholder="请选择文件···" readonly /> <input type="file" /> <a href="javascript:void(0);">选择文件</a> </div> </div> <div> <div></div> <div></div> </div> </body>

这里需要强调一下,选择文件的 “input” 标签的美化效果,这个标签在css 样式中会隐藏,我用另一个 “a” 链接标签实现点击按钮的作用,后续的效果在 js 代码中实现

接着看 js 代码, js 中 “a” 标签点击事件中触发 “input” 标签点击事件,然后再给文本赋值,显示文件路径,之后调用导入Excel 方法:

$(document).ready(function () { $('#select_btn').click(function () { $('#select_file').trigger('click'); }) $('#select_file').change(function () { $('#select_text').val($('#select_file').val()); importf(this); }) })

接下来实现导入Excel 方法,定义一个wb变量用于接收读取的EXCEL文档数据,读取过程是调用 xlsx.js 插件 实现的,官方demo中有标准的写法,这里不用纠结为什么这么写,知道这么用就可以,最后通过 XLSX.utils.sheet_to_json()方法可以得到 json 数据。

得到 json 数据后就是原生的 js 语法操作了,我们可以得到一个形如EXCEL表格那样的data 数组,代码如下:

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' }); } // 获取 EXCEL json数据 var jsondata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]); var column = []; var data = [column]; for (var key in jsondata[0]) { data[0].push(key); } for (var i = 0; i < jsondata.length; i++) { var row = []; data.push(row); for (var key in jsondata[i]) { data[i + 1].push(jsondata[i][key]); } } // 显示EXCEL 表格 creattable(data); // 显示数据表 getMultiBarChart(data); }; 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; }

关于EXCEL表格的实现,我是通过 “table” 标签实现的,在代码中,通过循环操作data 数组数据,形成一个html 代码,最后添加到对应的 div 块中。同时为了显示不同的表头样式,需要添加 id 属性,在css样式中实现样式的操作,代码如下:

function creattable(data) { var _html = " <table>"; for (var i = 0; i < data.length; i++) { _html += "<tr>"; _html += "<th>" + data[i][0] + "</th>"; for (var j = 1; j < data[i].length; j++) { if(i == 0){ _html += "<td>" + data[i][j] + "</td>"; } else { _html += "<td>" + data[i][j] + "</td>"; } } _html += "</tr>"; } _html += "</table>"; $('#table').append(_html); }

关于图表功能的实现,是调用 echart.js 插件实现的,在echart 官网,有非常详尽的设计文档和大量的demo可以参考,我们需要做的只是学会各个属性是如何配置的,然后调用 echart 的方法即可,具体实现看代码吧:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/de666b7c0304346477b7f92888c7f4b0.html