$('#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