侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

解决layUI导出到Excel时身份证号码、银行卡号显示不正确问题

前端  /  管理员 发布于 5年前   803

修改table.js 使用JS-excel 前端excel导出框架来实现Excel 导出

感谢layui 的编写者贤心,以及对layui做出贡献的各位大神,让我们有了开箱即用的前端js框架。为项目的编写节省了不少时间。

在使用layui table组件的过程中,发现在导出excel的时候身份证号码显示不正确 变成了科学计数法。

后来发现layUI在导出excel的时候其实和导出csv是一样的处理,造成了虽然导出数据用txt打开是正确的,

但是用excel 等工具打开会出现身份证,银行卡等信息被当成了数值类型。

变成了科学计数法,无法正常显示的问题。无法满足项目客户需求,通过后台代码导出excel 代价太大。系统有很多表需要导出,开发成本太高。

而且,太多导出会严重影响服务器性能。

怎么解决呢?推荐:layui教程

后来我找了一个前端的 js 导出excel的框架 sheetjs

发现里面有一个XLSX.utils.json_to_sheet 的方法挺好用,就想着自己尝试修改table.js源码来解决这个问题。

以下是我的解决方案,希望可以帮到你们

1: 在引入layui.js前 需要引入 xlsx.full.min.js.

<script type="text/javascript" src="../../js/xlsx.full.min.js" charset="utf-8"></script><script type="text/javascript" src="../../lib/layui/layui.js" charset="utf-8"></script>

2: 修改table.js 源码

//Conan Start    //准备csv导出数据    table.prepareCSVData = function (data, id) {        var dataTitle = [], dataMain = [];        layui.each(data, function (i1, item1) {            var vals = [];            if (typeof id === 'object') { //ID直接为表头数据                layui.each(id, function (i, item) {                    i1 == 0 && dataTitle.push(item || '');                });                layui.each(table.clearCacheKey(item1), function (i2, item2) {                    vals.push(item2);                });            } else {                table.eachCols(id, function (i3, item3) {                    if (item3.field && item3.type == 'normal' && !item3.hide) {                        i1 == 0 && dataTitle.push(item3.title || '');                        vals.push(item1[item3.field]);                    }                });            }            dataMain.push(vals.join(','))        });        return dataTitle.join(',') + '\r\n' + dataMain.join('\r\n');    }    //准备Excel表格导出数据    table.prepareExcelData = function (data, id) {        var excelData = [];        var dataTitle = [];        layui.each(data, function (i1, item1) {            var vals = [];            if (typeof id === 'object') {                 layui.each(id, function (i, item) {                    i1 == 0 && dataTitle.push(item || '');                });                layui.each(table.clearCacheKey(item1), function (i2, item2) {                    vals.push(item2);                });            } else {                table.eachCols(id, function (i3, item3) {                    if (item3.field && item3.type == 'normal' && !item3.hide) {                        i1 == 0 && dataTitle.push(item3.title || '');                        var colName = item3.field;                        var colValue = item1[colName];                        var templetFunc = item3.templet;                        //如果templet 方法不为空,使用templet方法进行值替换                        if(templetFunc != null) {                            colValue = templetFunc(item1);                        }                        vals.push(colValue);                    }                });            }            //为 js-excel 导出准备json数据            var tempStr = "";            for (var i = 0; i < vals.length; i++) {                if (i == 0) {                    tempStr = "\"" + dataTitle[i] + "\":" + "\"" + vals[i] + "\"";                } else {                    tempStr = tempStr + ",\"" + dataTitle[i] + "\":" + "\"" + vals[i] + "\"";                }            }            var tempLineJsonObjStr = "{" + tempStr + "}";            excelData.push(JSON.parse(tempLineJsonObjStr));            //dataMain.push(vals.join(','))        });        return excelData;    }    //Conan End    //表格导出    table.exportFile = function (id, data, type) {        data = data || table.clearCacheKey(table.cache[id]);        type = type || 'csv';        var config = thisTable.config[id] || {}            , textType = ({                csv: 'text/csv'                , xls: 'application/vnd.ms-excel'            })[type]            , alink = document.createElement("a");        //Conan Start        if (device.ie) return hint.error('IE_NOT_SUPPORT_EXPORTS');        if (type == 'csv') {            alink.href = 'data:' + textType + ';charset=utf-8,\ufeff' + encodeURIComponent(function () {                return table.prepareCSVDat1;           workBook.Sheets['Sheet1'] = XLSX.utils.table_to_sheet(jsonTable);            */            var excelJsonStr = table.prepareExcelData(data, id);            workBook.Sheets['Sheet1'] = XLSX.utils.json_to_sheet(excelJsonStr);            var xlsFilename = (config.title || 'table_' + (config.index || '')) + '.' + type;            saveAs(new Blob([changeData(XLSX.write(workBook, wopts))], { type: "application/vnd.ms-excel" }), xlsFilename);        }        //Conan End    };导出文件需要用到的方法 changeData, saveAs. 请在layui 之前引用。如放入app.js,然后再layui 之前引用。<script type="text/javascript" src="../../js/app.js" charset="utf-8"></script><script type="text/javascript" src="../../js/xlsx.full.min.js" charset="utf-8"></script><script type="text/javascript" src="../../lib/layui/layui.js" charset="utf-8"></script>function getFileName(filePath){    var pos=filePath.lastIndexOf("\\");    return filePath.substring(pos+1);  }function saveAs(obj, fileName) {//当然可以自定义简单的下载文件实现方式     var tmpa = document.createElement("a");    tmpa.download = fileName || "下载";    tmpa.href = URL.createObjectURL(obj); //绑定a标签    tmpa.click(); //模拟点击实现下载    setTimeout(function () { //延时释放        URL.revokeObjectURL(obj); //用URL.revokeObjectURL()来释放这个object URL    }, 100);}function changeData(s) {    //如果存在ArrayBuffer对象(es6) 最好采用该对象    if (typeof ArrayBuffer !== 'undefined') {                //1、创建一个字节长度为s.length的内存区域        var buf = new ArrayBuffer(s.length);                //2、创建一个指向buf的Unit8视图,开始于字节0,直到缓冲区的末尾        var view = new Uint8Array(buf);                //3、返回指定位置的字符的Unicode编码        for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;        return buf;    } else {        var buf = new Array(s.length);        for (var i = 0; i != s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;        return buf;    }}

然后就可以在表格导出中点击导出excel 试一下了。

以上就是解决layUI导出到Excel时身份证号码、银行卡号显示不正确问题的详细内容,更多请关注其它相关文章!


  • 上一条:
    layui常用方法
    下一条:
    在layui的layDate组件中添加设置一周开始的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客