Easyui的数据纯前端js导出

前言

目前数据导出excel的大多结合后端,大多数原理无非poi,io流。但也不排除部分业务需要前端导出更为便捷。下面实战演示。

页面部分

由于框架原因,前端数据的展示为采用framaker模板+js+easyui,方法是通用的,这个不用担心。

     <!--按钮-->
    <a class="easyui-linkbutton export"  data-options="iconCls:'fa fa-print'">导出数据</a>
      <!--数据表格-->
     <div data-options="region:'center',border:false" style="height: 150px;border-top: 1px solid #D3D3D3">
        <table id="assume_param_dg"></table>
      </div>
js部分(数据表格)
        var dg = $("#assume_param_dg");
         var searchFrom = $("#assume_param_search_from");
        dg.datagrid({
            url: '/actuary/assumeparam/assumeparam/list',
            emptyMsg: "无参数信息",
            idField: "id",
            fit: true,
            rownumbers: true,
            fitColumns: true,
            border: false,
            pagination: true,
            singleSelect: true,
            pageSize: 20,
            columns: [[{
                field: 'policyYear',
                title: '保单年度',
                width: '10%',
                align: 'center',
                fixed: true,
                formatter: function (val) {
                    if (val == '' || val == null) {
                        dg.datagrid('hideColumn', 'policyYear');
                    } else {
                        dg.datagrid('showColumn', 'policyYear');
                        return val;
                    }
                }
            }, {
                field: 'policyMonth',
                title: '保单月度',
                width: '10%',
                align: 'center',
                fixed: true,
                formatter: function (val) {
                    if (val == '' || val == null) {
                        dg.datagrid('hideColumn', 'policyMonth');
                    } else {
                        dg.datagrid('showColumn', 'policyMonth');
                        return val;
                    }
                }
            },  {
                field: 'discountTable',
                title: 'Discount Rate Tables',
                width: '10%',
                align: 'center',
                fixed: true,
                formatter: function (val) {
                    if (val == '' || val == null) {
                        dg.datagrid('hideColumn', 'discountTable');
                    } else {
                        dg.datagrid('showColumn', 'discountTable');
                        return val;
                    }
                }
            }]]
        });
导出js

数据处理看个人情况,由于我这里是动态查询的结果,有数据的列显示,没有数据的列隐藏,所以获取的rows是所有列的数据,所以针对没有数据的列删除;如果不对json数据进行替换,它默认导出的表格头是json数据中的key。可以在得到json数据时,对表头处理。

       searchFrom.on('click', 'a.export', function () {
           // 获取选中行
           var rows = dg.treegrid("getRows");
           for (var i = 0; i < rows.length; i++) {    //进行数据处理
             if(rows[i].policyYear == null){
                   delete rows[i].policyYear;
               }
               if(rows[i].policyMonth == null){
                   delete rows[i].policyMonth;
               }
            if(rows[i].discountTable == null){
                   delete rows[i].discountTable;
               }
             
               //直接移除不要的字段
               delete rows[i].id;  
           }

           //转化为json对象
           var data = JSON.stringify(rows);
           //替换中文标题
           var a = data.replace(/policyYear/g, "保单年度").replace(/policyMonth/g, "保单月度").replace(/discountTable/g, "Discount Rate Tables");
           if (a == '')
               return;
           JSONToCSVConvertor(a, "", true);

        });
             //表格导出开始,将json对象导出为CSV文件
            function JSONToCSVConvertor(JSONData, ReportTitle, ShowLabel) {
                //If JSONData is not an object then JSON.parse will parse the JSON string in an Object
                var arrData = typeof JSONData != 'object' ? JSON.parse(JSONData)
                    : JSONData;

                var CSV = '';
                //Set Report title in first row or line
                CSV += ReportTitle + '\r';

                //This condition will generate the Label/Header
                if (ShowLabel) {
                    var row = "";

                    //此循环将取出每列的标题
                    for ( var index in arrData[0]) {

                        //Now convert each value to string and comma-seprated
                        row += index + ',';

                    }

                    //这里row为json对象的各个字段名。若是需要将字段名转化为中文可在这里替换
                    row = row.slice(0, -1);
                    console.log(1);
                    console.log(row);


                    //append Label row with line break
                    CSV += row + '\r\n';
                }

                //1st loop is to extract each row
                for (var i = 0; i < arrData.length; i++) {
                    var row = "";
                    //2nd loop will extract each column and convert it in string comma-seprated
                    for ( var index in arrData[i]) {
                        row += '"' + arrData[i][index] + '",';
                    }
                    row.slice(0, row.length - 1);

                    //add a line break after each row
                    CSV += row + '\r\n';
                }
                if (CSV == '') {
                    alert("Invalid data");
                    return;
                }
                //Generate a file name
                var fileName = "导出参数值信息";
                //this will remove the blank-spaces from the title and replace it with an underscore
                fileName += ReportTitle.replace(/ /g, "_");

                //Initialize file format you want csv or xls
                var uri = 'data:text/csv;charset=utf-8,\ufeff' +encodeURI(CSV);

                // Now the little tricky part.
                // you can use either>> window.open(uri);
                // but this will not work in some browsers
                // or you will not get the correct file extension    
                //this trick will generate a temp <a /> tag
                var link = document.createElement("a");
                link.href = uri;
                //set the visibility hidden so it will not effect on your web-layout
                link.style = "visibility:hidden";
                link.download = fileName + ".csv";
                //this part will append the anchor tag and remove it after automatic click
                document.body.appendChild(link);
                link.click();
                document.body.removeChild(link);
            }         
效果展示图

导出的是csv格式文件,如果需要xls格式可能还得结合后端,为了演示方便,我这里只是写了部分字段,原理是一样的。
在这里插入图片描述
导出:在这里插入图片描述
参考链接:https://blog.csdn.net/qq_31702121/article/details/81131769
https://www.cnblogs.com/kingdudu/p/4863980.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值