Lay ui导出数据到Excel

博客介绍了使用layui框架导出Excel时遇到的长整数显示问题,通过官方插件实现了自定义每行数据的导出,确保了数据完整。示例代码展示了如何处理身份证号等长整数,以及如何格式化日期和根据特定值返回定制内容。导出样式满足需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用layui 自带的到处数据到excel比较坑,不能自定义数据。会将身份证等 长整数的 自动变成E+并且 后面有000.从而导致数据不能完整导出。后来在官网找到个插件可以设置每一行的返回值,这样就完美解决了没法处理后台返回的而数据的问题

插件文档及下载地址
文件结构

  • 代码如下
 <button type="button" lay-submit="" class="layui-btn layui-btn-warm" id="exportExcel"name="exportExcel">
       <i class="layui-icon"></i>导出Excel
 </button>
 
 //js
layui.config({//配置并导入excel插件
        base: '/js/layui/layui_exts/'
    }).use(['excel', 'layer'], function () {
        var $ = layui.$;
        var layer = layui.layer;
        var excel = layui.excel;
        $('#exportExcel').on('click', function () {
			      // list 数据样式 {[Insured_name: ""
			LAY_TABLE_INDEX: 0
			acct_name: ""
			auth_status: "init"
			auther: "张经理"
			bank_code: ""
			brand: ""
			car_no: "京AW4666"
			car_owner_idno: ""
			card_no: ""
			channel: "dx"
			company: "pa"
			ctime: 1604720169000
			discount: 3.33
			discount_amt: 100
			edate: 1636128000000
			engine: "4864864"
			insure_idno: ""
			insure_name: "SS"
			insured_idno: ""
			issu_acct_no: "kf1"
			issu_time: 1604592000000
			jy_amt: 800
			kind: "sxxb"
			phone1: "18790250190"
			phone2: ""
			policy: "11788899955544411125"
			premium: 3000
			rate: 30
			recrod_status: "unused"
			reg_date: 1541001600000
			sdate: 1604678400000
			turn_renew: "renew"
			tzid: "TZID2020110700000769"
			under_write_date: 1604678400000
			user_id: "CMU20201012000000109"
			user_name: "开发"
			vin: "GYUAGYWDGWAGD"],....}
      
                    var data = list.list;
            //         console.log(res);
           //   data = excel.filterExportData(data, ['id', 'sex', 'username', 'city]) 可以写成数组方式 仅用于排序、字段过滤,比如我希望的导出顺序和字段是'id', 'sex', 'username', 'city

            //还有下面这种对象格式的推荐:可以定义当前单元格的值
                    data = excel.filterExportData(data, {
                        car_no: 'car_no',
                        under_write_date: function (value, line, data) {
                        //return 啥当前单元格就显示神马
                            return FomdateTime(value, 'YY-MM-DD')
                        },
                        company: function (value, line, data) {
                          //value 当前单元格的值
                         //data 但前要导出的所有数据 data 
                            if (value == 'pa') {
                                return "平安"
                            } else if (value == 'rb') {
                                return "人保"
                            } else if (value == 'tpy') {
                                return '太平洋'

                            }
                        },
                        insure_name: 'insure_name'
                        , policy: 'policy'
                        , kind: function (value, line, data) {
                            return getNameById(value, 'policy_kind')
                        }
                        , premium: 'premium'
                        , jy_amt: 'jy_amt'
                        , rate: 'rate'
                        , discount: 'discount'
                        , sdate: function (value, line, data) {
                            return FomdateTime(value, 'YY-MM-DD')
                        },
                        edate: function (value, line, data) {
                            return FomdateTime(value, 'YY-MM-DD')
                        }
                        , auth_status: function (value, line, data) {
                            return getNameById(value, 'auth_status')
                        },
                        auther: 'auther'
                        , user_name: 'user_name',

                    });
                    // 重点2!!!一般都需要加一个表头,表头的键名顺序需要与最终导出的数据一致
                    data.unshift({
                        car_no: "车牌号",
                        under_write_date: "承保日期",
                        company: '承保单位',
                        insure_name: "投保人",
                        policy: "保单号",
                        kind: '险种',
                        premium: "保费",
                        jy_amt: "结余金额",
                        rate: '费率%',
                        discount: "打折比例%",
                        sdate: "保险起期",
                        edate: "保险止期",
                        auth_status: "状态",
                        auther: "审核人",
                        user_name: "经办人",
                    });
                    var timestart = Date.now();
                    excel.exportExcel(data, '台账查询.xlsx', 'xlsx');
                    //data 数据列表
                    //第二个参数 文件名
                    //第三个 文件后缀名
        });
    });
  • 导出后样式
    在这里插入图片描述
### 如何使用 LayuiLay-Excel 插件实现 Excel 导出功能 #### 安装依赖库 为了能够顺利使用 `lay-excel` 进行 Excel 文件的操作,在项目中需要先安装该插件。可以通过 npm 来完成这一操作。 ```bash $ npm i lay-excel ``` #### 配置导出选项 当准备就绪之后,可以配置一些基本参数用于定义最终生成的 Excel 文档属性,比如文件名称等[^3]: ```javascript const filename = function () { return &#39;诗词_&#39; + util.toDateString(new Date(), &#39;yyyyMMdd&#39;) + &#39;.xlsx&#39;; }; ``` 这段代码会动态创建一个带有当前日期作为后缀的文件名字符串。 #### 准备待导出数据 通常情况下,开发者会在页面上展示表格形式的数据,并希望把这些数据显示的内容保存成 Excel 表格的形式供用户下载。因此,首先要确保有可用的数据源可供处理。假设有一个名为 `exportListLay()` 的函数负责收集这些数据,则后续逻辑可能如下所示[^5]: ```javascript function exportTable() { const data = exportListLay(); if (!data || !data.length) { Msg.error(&#39;未获取到数据&#39;); return; } // 对每条记录做必要的转换或调整 $.each(data, (index, item) => { // 修改数据代码... }); // 调用实际执行导出的方法并将整理好的数据传递过去 exportExcelLay(data); } ``` 此部分实现了从界面上抓取所需信息并对其进行初步加工的过程;接着调用了另一个专门用来生成 Excel 并提供给客户端下载的服务接口——即 `exportExcelLay()` 方法。 #### 执行导出动作 最后一步就是真正地把之前准备好的一切组合起来形成完整的 Excel 文件并向浏览器发送响应以便于触发下载行为。这一步骤由前面提到过的 `exportExcelLay()` 函数来承担主要职责[^2]。 ```javascript // 假设这是位于某个服务端脚本中的辅助工具类的一部分, // 或者是一个封装好了可以直接使用的 API 接口。 exportExcelLay(preparedDataArray); ``` 以上便是利用 Layui 结合 Lay-Excel 插件快速构建起一套简易却实用的 Excel 数据导出机制的大致流程介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值