如何解决datatables.net导出excel时长数字被转为指数格式的问题
Datatables导出Excel长数字自动转指数值解决方案
以下3种方案可适配不同业务场景:
方案1:导出时强制指定目标列为文本格式(推荐列固定场景使用)
直接修改导出的Excel内部单元格属性,不会修改原始数据和页面展示内容,性能最优
初始化配置中excelHtml5按钮增加customize回调即可:
$('#yourTable').DataTable({ dom: 'Bfrtip', buttons: [ { extend: 'excelHtml5', customize: function(xlsx) { const sheet = xlsx.xl.worksheets['sheet1.xml']; // 示例匹配第3列(对应Excel列号为C),可按需修改匹配规则 $('row c[r^="C"]', sheet).each(function() { // 55为Datatables内置的纯文本格式编号 $(this).attr('s', '55'); const cellVal = $(this).find('v').text(); // 仅对11位及以上的长数字设置文本类型,可调整判断规则 if(/^\d{11,}$/.test(cellVal)) { $(this).attr('t', 'str'); } }); } } ] })
方案2:导出预处理添加零宽字符(兼容所有Excel版本)
给长数字前拼接不可见的零宽不换行空格,Excel会自动识别为文本类型,不会触发数值格式化,适配性最强
$('#yourTable').DataTable({ dom: 'Bfrtip', buttons: [ { extend: 'excelHtml5', exportOptions: { format: { body: function(data, row, column, node) { // 示例判断第2列(索引从0开始),可按需调整列索引和判断规则 if(column === 1 && /^\d{11,}$/.test(data.trim())) { return '\u200C' + data.trim(); } return data; } } } } ] })
注:零宽字符不会在Excel中显示,也不影响后续数值复制、运算等操作
方案3:全表数值默认按文本导出(适用长数字列不固定场景)
无需提前指定列,导出时所有单元格默认按文本格式处理,适合表格列动态变化的场景
$('#yourTable').DataTable({ dom: 'Bfrtip', buttons: [ { extend: 'excelHtml5', customize: function(xlsx) { const sheet = xlsx.xl.worksheets['sheet1.xml']; // 遍历所有单元格设置为文本格式 $('row c', sheet).attr('s', '55'); } } ] })
内容的提问来源于stack exchange,提问作者Idrak Dareshani
相关产品推荐
相关产品推荐

