[web教学] layui 导出 Excel表格的方法

[复制链接]
查看841 | 回复0 | 2023-8-23 11:37:56 | 显示全部楼层 |阅读模式 来自 中国北京
一、使用layui自带的excel导出功能

  1. // 原始容器
  2. <table id="demo" lay-filter="test"></table>
  3. //JS 调用:
  4. table.render({
  5.   elem: '#demo'
  6.   ,toolbar: '#toolbarDemo' // 重点,可默认,也可自己设置按钮
  7.   ,defaultToolbar: ['filter', 'exports'], // exports为导出按钮
  8.   //,…… //其他参数
  9. });
复制代码
如下图:

 也可设置数据导出按钮,通过方法导出恣意数据,方法如下:
语法:
  1. table.exportFile(id, data, type)
复制代码
示例:
  1. var ins1 = table.render({
  2.     elem: '#demo1'
  3.     ,id: 'test'
  4.     // ,.... //其他参数
  5. })
  6. // 将上述表格示例导出为csv文件
  7. table.exportFile(ins1.config.id, data); // data 为该实例中的任意数量的数据
复制代码
该方法也可以不用依靠table的实例,可直接导出恣意数据:
  1. table.exportFile(['名字','性别','年龄'], [
  2.   ['张三','男','20'],
  3.   ['李四','女','18'],
  4.   ['王五','女','19']
  5. ], 'csv'); //默认导出 csv,也可以为:xls
复制代码
二、使用第三方扩展插件:excel.js

1、下载插件放入项目中

 
2、前端界面设置button按钮
  1. <button class="layui-btn layui-btn-normal " lay-event="bgShow">导出</button>
复制代码
3、获取点击事件
  1. //头工具栏事件
  2.        layui.table.on('toolbar(table)', function (obj) {
  3.             var checkStatus = layui.table.checkStatus(obj.config.id);
  4.             switch (obj.event) {
  5.                 case 'bgShow':   //导出
  6.                     exportFile("table", "XXXXX"); // 第一个参数:table;第二个参数为文件名称
  7.                     break;
  8.             };
  9.         });
复制代码
4、table分页,导出当前页内容
  1. function exportFile(id, titleInfo) {
  2. //根据传入tableID获取表头
  3. var headers = $("div[lay-id=" + id + "] .layui-table-box table").get(0);
  4. var htrs = Array.from(headers.querySelectorAll('tr'));
  5. var titles = {};
  6. for (var j = 0; j < htrs.length; j++) {
  7.      var hths = Array.from(htrs[j].querySelectorAll("th"));
  8.      for (var i = 0; i < hths.length; i++) {
  9.          var clazz = hths[i].getAttributeNode('class').value;
  10.          if (clazz != ' layui-table-col-special' && clazz != 'layui-hide') {
  11.              //排除居左、具有、隐藏字段
  12.              //修改:默认字段data-field+i,兼容部分数据表格中不存在data-field值的问题
  13.              titles['data-field' + i] = hths[i].innerText;
  14.           }
  15.      }
  16.   }
  17. //根据传入tableID获取table内容
  18. var bodys = $("div[lay-id=" + id + "] .layui-table-box table").get(1);
  19. var btrs = Array.from(bodys.querySelectorAll("tr"));
  20. var bodysArr = new Array();
  21. for (var j = 0; j < btrs.length; j++) {
  22.     var contents = {};
  23.     var btds = Array.from(btrs[j].querySelectorAll("td"));
  24.     for (var i = 0; i < btds.length; i++) {
  25.         for (var key in titles) {
  26.             //修改:默认字段data-field+i,兼容部分数据表格中不存在data-field值的问题
  27.             var field = 'data-field' + i;
  28.             if (field === key) {
  29.                //根据表头字段获取table内容字段
  30.                contents[field] = btds[i].innerText;
  31.             }
  32.         }
  33.      }
  34.      bodysArr.push(contents)
  35.   }
  36.   //将标题行置顶添加到数组
  37.   bodysArr.unshift(titles);
  38.   // 导出excel
  39.   layui.config({
  40.      base: 'assets/libs/layui_extends/' // 插件路径
  41.   }).use(['excel'], function () {
  42.      var excel = layui.excel;
  43.      excel.exportExcel({
  44.         sheet1: bodysArr
  45.      }, titleInfo + new Date().toLocaleString() + '.xlsx', 'xlsx');
  46.    });
  47. }
复制代码
5、导出全部数据
  1. function exportFile(id, titleInfo) {
  2.    $.ajax({
  3.        url: 'xxxxxx', // 获取数据的接口
  4.        type: 'get',
  5.        data: {},
  6.        success: function (res) {
  7.           if (res.code == 0) {
  8.              var excelData = res.data;
  9.              layui.config({
  10.                 base: 'assets/libs/layui_extends/'
  11.              }).use(['excel'], function () {
  12.                 var excel = layui.excel;
  13.                 excelData = excel.filterExportData(excelData, [
  14.                     'aaa','bbb','ccc' // 对应需要导出的字段,根据后台返回数据对应需要字段
  15.                 ])
  16.                 // 对应数据的表头
  17.                 excelData.unshift({ aaa: 'aaa', bbb: 'bbb', ccc: 'ccc' });
  18.                 excel.exportExcel(excelData, titleInfo + new Date().toLocaleString() + '.xlsx', 'xlsx');
  19.                         });
  20.           } else {
  21.                layer.closeAll();
  22.                layer.msg("数据导出失败", { icon: 2 });
  23.           }
  24.       },
  25.       error: function (error) {
  26.          console.log("获取全部数据失败:", error);
  27.       }
  28.    })
  29. }
复制代码



路漫漫其修远兮,吾将上下而求索!


来源:https://blog.csdn.net/weixin_38817361/article/details/129040044
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则