layui.config({ base: './../../static/layui/layui_exts/' }).use(['table', 'excel'], function () { var table = layui.table //表格 , $ = layui.$, excel = layui.excel; var LIST_TABLE_ID = "listTable"; // table ElementId $(".export-button").click(function (e) { exportFile('listTable'); }); //执行一个 table 实例 table.render({ elem: '#listTable', height: 420, data: [{ id: 1, username: '小毛', city: '长沙', birth: '1990-06-16', createTime: '2020-01-01', remark: '备注' }], // url: './data.json', //数据接口 title: '用户表', page: true, //开启分页 toolbar: '#toolbarDemo', //操作1:启用自定义模板表格头部工具栏 defaultToolbar: [], //操作2:隐藏头部工具栏右侧的图标 cols: [ [ //表头 { type: 'checkbox', fixed: 'left' }, { field: 'id', title: 'ID', width: 200, sort: true }, { field: 'username', title: '用户名', width: 100 }, { field: 'city', title: '城市', width: 100 }, { field: 'birth', title: '生日', width: 120, sort: true, totalRow: true }, { field: 'createTime', title: '创建日期', width: 180 }, { field: 'remark', title: '备注', width: 300 } ] ] }); //监听头工具栏事件 table.on('toolbar(test)', function (obj) { var checkStatus = table.checkStatus(obj.config.id), data = checkStatus.data; //获取选中的数据 switch (obj.event) { case 'table_export': exportFile('demo') break; }; }); /** * by yutons * Array.from() 非常方便的将一个类数组的集合 ==》 数组,直接使用数组身上的方法。例如:常用的map,foreach… * 但是,问题来了,IE不识别Array.from这个方法。所以写了它兼容IE的写法。 */ if (!Array.from) { Array.from = function (el) { return Array.apply(this, el); } } //表格导出 function exportFile(id) { //根据传入tableID获取表头 var headers = $("div[lay-id=" + id + "] .layui-table-box table").get(0); var htrs = Array.from(headers.querySelectorAll('tr')); var titles = {}; for (var j = 0; j < htrs.length; j++) { var hths = Array.from(htrs[j].querySelectorAll("th")); for (var i = 0; i < hths.length; i++) { var clazz = hths[i].getAttributeNode('class').value; if (clazz != ' layui-table-col-special' && clazz != 'layui-hide') { //排除居左、具有、隐藏字段 //修改:默认字段data-field+i,兼容部分数据表格中不存在data-field值的问题 titles['data-field' + i] = hths[i].innerText; } } } //根据传入tableID获取table内容 var bodys = $("div[lay-id=" + id + "] .layui-table-box table").get(1); var btrs = Array.from(bodys.querySelectorAll("tr")) var bodysArr = new Array(); for (var j = 0; j < btrs.length; j++) { var contents = {}; var btds = Array.from(btrs[j].querySelectorAll("td")); for (var i = 0; i < btds.length; i++) { for (var key in titles) { //修改:默认字段data-field+i,兼容部分数据表格中不存在data-field值的问题 var field = 'data-field' + i; if (field === key) { //根据表头字段获取table内容字段 contents[field] = btds[i].innerText; } } } bodysArr.push(contents) } //将标题行置顶添加到数组 bodysArr.unshift(titles); //导出excel excel.exportExcel({ sheet1: bodysArr }, '表' + new Date().toLocaleString() + '.xlsx', 'xlsx'); } });