Easyui 使用 datagrid-export.js 导出数据证件号转换成科学计数法的问题,解决方案

这篇博客介绍了在使用Easyui datagrid导出表格到Excel时,遇到身份证号码显示为科学计数法并丢失尾部数字的问题。作者通过分析datagrid-export.js源码发现,当数值大于99999999999时,将其设置为字符串格式可以避免此问题。添加了判断条件,确保数值型身份证号在导出时不被错误处理,同时指出这种方法对其他大数值也可能适用,且不会引起错误。

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

$('#dg').datagrid('toExcel', '报表统计.xls');

使用Easyui 导出表格数据,发现导出的数据身份证件号这栏变成了科学计数法,然后载excel里面转换成文本,会丢失证件号最后6位,这个刚开始很棘手,不知道怎么处理,经过一步一步排查。

发现后端返回的证件号是 “6221261988*******” 这样的格式,很明显是字符串模式,哪就排除了json数据转化过程中问题,那么问题就处在前端,分析  datagrid-export.js 源码  发现这个地方:

    function toHtml(target, rows, footer, caption){
        rows = rows || getRows(target);
        rows = rows.concat(footer||getFooterRows(target));
        var dg = $(target);
        var data = ['<table border="1" rull="all" style="border-collapse:collapse">'];
        var fields = dg.datagrid('getColumnFields',true).concat(dg.datagrid('getColumnFields',false));
        var trStyle = 'height:32px';
        var tdStyle0 = 'vertical-align:middle;padding:0 4px';
        if (caption){
            data.push('<caption>'+caption+'</caption>');
        }
        data.push('<tr style="'+trStyle+'">');
        for(var i=0; i<fields.length; i++){
            var col = dg.datagrid('getColumnOption', fields[i]);
            var tdStyle = tdStyle0 + ';width:'+col.boxWidth+'px;';
            tdStyle += ';text-align:'+(col.halign||col.align||'');
            data.push('<td style="'+tdStyle+'">'+col.title+'</td>');
        }
        data.push('</tr>');
        $.map(rows, function(row){
            data.push('<tr style="'+trStyle+'">');
            for(var i=0; i<fields.length; i++){
                var field = fields[i];
                var col   = dg.datagrid('getColumnOption', field);
                var value = row[field];
                if (value == undefined){
                    value = '';
                }
                var tdStyle = tdStyle0;
                tdStyle += ';text-align:' + (col.align || '');
                //liuwei 修正导出证件号科学计数法问题 2022-07-17
                if (value != "" && !isNaN(value) && value > 99999999999)
                {
                    tdStyle += ';mso-number-format:\'\@\';';
                }

                data.push(
                    '<td style="'+tdStyle+'">'+value+'</td>'
                );
            }
            data.push('</tr>');
        });
        data.push('</table>');
        return data.join('');
    }

转化的时候,对大于99999999999,的值按字符串处理,就可以了,当然你可能考虑如果不是证件号,但是值大于99999999999,会不会出现问题,仔细想一下,不会有问题,如果真有这种情况,字符串强制转数字,只要字符串本身是数字,就不会出现问题,所以OK, 当然你也可以用正则判断是不是证件号,然后处理,也是可以的。

注意上述代码红色部门 为增加的js代码, datagrid-export.js  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值