参考:https://fly.layui.com/jie/51262/

重点:先引入

template导出excel时在浏览器下载 浏览器导出excel表格没反应_数组

<!DOCTYPE html>
 <html>
     <head>
         <meta charset="utf-8">
         <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
         <title>导出表格数据的DEMO</title>
         <link rel="stylesheet" href="../layui/css/layui.css" media="all"> 
         <style>
             body {
             margin: 10px;
         }        .layui-table-tool-temp {
             padding-right: 0;
             margin-right: 0;
             /*text-align: right;*/
         }        .yutons,
         .layui-btn-sm {
             margin-top: -2px;
         }        /* 修改头部工具右侧筛选、导出、打印样式 */
         .yutons-header-tool {
             margin-top: -2px;
             width: 30px !important;
             height: 30px !important;
             background-color: #ffffff;
         }        /* 修改右侧筛选、导出、打印出发的ul标签定位 */
         .layui-table-tool-panel {
             left: auto;
             right: -1px;
         }        /* div 右侧10px */
         .yutons-btn-margin-right {
             margin-right: 10px;
             line-height: 40px;
         }
     </style>
     </head>
     <body>
         <blockquote class="layui-elem-quote">


            鉴于layui自带的导出功能不是很完善,存在问题如下:</br>
            问题1:导出长数字,后几位强制变成0;</br>
            问题2:时间日期格式导出默认为时间或日期,无法显示完整的日期+时分秒格式</br>
            问题3:文本内容中包含','(小写逗号)时,导出excel默认将字符串以逗号拆分成多个excel表格</br>
            问题4:如果在table渲染时您采用了模板引擎对数据进行了二次渲染,对不起,layui提供的excel导出无法获取到您渲染后的数据(此测试页面未对该问题进行还原,请自行测试)</br>
            问题详情请参照当前页面layui自带导出工具导出查询</br>
            解决方案如下:</br>
            1、点击左侧导出按钮导出,解析当前table可视范围内数据以字符串格式输出,默认调用excel.exportExcel方法</br>
            2、重写头部工具栏,避免修改table源码,触发导出</br>
            3、支持根据筛选导出内容数据</br>
            4、修改因部分表格数据不存在data-field字段值的情况下无法正常导出的bug<br/>
            5、修复IE不识别Array.from的问题,兼容IE<br/>
            存在问题:1、暂时未对复杂表头进行测试;2、暂时未对自定义样式进行测试
     

</blockquote>
         <table class="layui-hide" id="demo" lay-filter="test"></table>
         <script type="text/html" id="toolbarDemo">
             <div class="layui-row">
         <div class="layui-col-md2 layui-col-sm3 layui-col-xs6" style="text-align: left;padding-left: 10px;">
             <div class="layui-input-inline yutons-btn-margin-right">
                <span class="layui-btn yutons layui-btn-sm yutons-color-detail" lay-event="table_export">导出</span>
             </div>
         </div>
         <div class="layui-col-md10 layui-col-sm9 layui-col-xs6" style="text-align: right;">
             <div class="layui-input-inline yutons-btn-margin-right">
                 <span class="layui-btn yutons layui-btn-sm yutons-color-detail" lay-event="YutonsCallCenterWorkOrderSearch"
                       id="YutonsCallCenterWorkOrderSearch">查询</span>
             </div>
             <div class="layui-input-inline yutons-btn-margin-right" style="margin-right: 0px;">
                 <span class="layui-inline yutons-header-tool" title="筛选列" lay-event="LAYTABLE_COLS">
                             <i class="layui-icon layui-icon-cols"></i></span>
                 <span class="layui-inline yutons-header-tool" title="导出" lay-event="table_export">
                                     <i class="layui-icon layui-icon-export"></i></span>
                 <span class="layui-inline yutons-header-tool" title="导出" lay-event="LAYTABLE_EXPORT">
                                     <i class="layui-icon layui-icon-export"></i></span>
                 <span class="layui-inline yutons-header-tool" title="打印" lay-event="LAYTABLE_PRINT">
                             <i class="layui-icon layui-icon-print"></i>
                 </span>
             </div>
         </div>
     </div>
 </script>
         <script src="../layui/layui.js"></script>
         <script>
             layui.config({
                 base: '../layui_exts/' 
             }).use(['table', 'excel'], function() {
                 var table = layui.table //表格
                     ,
                     $ = layui.$,
                     excel = layui.excel;                 //执行一个 table 实例
                 table.render({
                     elem: '#demo',
                     height: 420,
                     url: , //数据接口
                     where:{"id":10},
                     title: '用户表',
                     page: true, //开启分页
                     toolbar: '#toolbarDemo', //操作1:启用自定义模板表格头部工具栏
                     defaultToolbar: [], //操作2:隐藏头部工具栏右侧的图标
                     cols: [
                         [  {field:'id', title:'ID',align: 'center'}
                           ,{field:'name', title:'名字',align: 'center'}
                         ]
                     ]
                 });                //监听头工具栏事件
                 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');
                 }
             });
         </script>
     </body>
 </html>