Dynamic Datatables导出Excel时列数值发生变更问题咨询
问题原因与解决方案
问题根因
这个问题是Excel本身的数值存储特性与Datatables默认导出逻辑共同导致的:
- Excel本身限制:Excel默认将纯数字内容识别为双精度浮点数类型存储,该类型仅支持最多15位有效数字,你提到的账号原值
1031001746692014为16位,超出精度范围的部分会被Excel自动截断归零,从而出现数值异常。 - Datatables导出默认逻辑:默认导出Excel时会将纯数字列识别为数值类型输出,未做文本格式强制标注,因此会触发Excel的精度限制。
修复方案
调整Datatables的Excel导出按钮配置,强制将账号列识别为文本格式导出即可解决问题,修改后的初始化代码参考如下:
$(document).ready(function(){ $('#tracker_list').DataTable({ dom: 'ZBflrtip', 'processing': true, 'serverSide': true, 'pageLength': 25, 'serverMethod': 'post', 'lengthMenu': [[10,25,50,100, -1], [10,25,50, 100, "All"]], 'order': [ 0, 'desc' ], 'ajax': { 'url':'ajax/url_to_method' }, 'columns': [ { data : 'id'}, { data: 'account_number' }, ], 'columnDefs': [{ 'targets': [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19], /* column index */ 'orderable': true, /* true or false */ 'order': [ 1, 'desc' ] }], 'buttons': [ 'copy', 'csv', 'pdf', 'print', { extend: 'excel', exportOptions: { format: { body: function(data, row, column, node) { // 匹配账号列索引(此处为1,可根据实际列位置调整) if (column === 1) { // 加制表符前缀,强制Excel识别为文本,制表符不会在单元格中显示 return '\t' + data; // 可选方案:返回公式格式 return '="' + data + '"' } return data; } } } } ] }); });
修改完成后重新导出即可看到账号内容和Web端展示完全一致。
内容的提问来源于stack exchange,提问作者Esar-ul-haq Qasmi
相关产品推荐
相关产品推荐

