Jquery Datatable导出MsExcel时长数字格式失真如何解决?
解决jQuery DataTables导出Excel时长数字被近似的问题
Excel对超过15位的数字会自动进行近似处理(比如把1234567891011121314转成123456789101112000),核心解决思路是强制Excel以文本格式解析长数字,以下是几种可行的实现方法:
方法一:导出时给长数字加制表符前缀
在DataTables的Excel导出配置中,对目标列的内容预处理,添加制表符\t前缀,让Excel识别为文本:
$('#your-table').DataTable({ buttons: [ { extend: 'excelHtml5', exportOptions: { format: { body: function(data, row, column, node) { // 假设第3列(索引从0开始)是长数字列 if (column === 2) { return '\t' + data; } return data; } } } } ] });
方法二:读取单元格原始属性值导出
如果长数字在HTML中通过data-value存储原始值(避免页面渲染时的格式问题),导出时优先读取该属性并转文本:
<td data-value="1234567891011121314">1234567891011121314</td>
对应的JS配置:
$('#your-table').DataTable({ buttons: [ { extend: 'excelHtml5', exportOptions: { format: { body: function(data, row, column, node) { const rawValue = $(node).attr('data-value'); return rawValue ? '\t' + rawValue : data; } } } } ] });
方法三:直接修改Excel文件的单元格格式
通过customize钩子操作Excel的XML结构,给目标列设置文本格式:
$('#your-table').DataTable({ buttons: [ { extend: 'excelHtml5', customize: function(xlsx) { const sheet = xlsx.xl.worksheets['sheet1.xml']; // 给C列(对应XML中r属性以C开头的单元格)设置文本样式 $('row c[r^="C"]', sheet).attr('s', '20'); } } ] });
注:
s="20"是Excel内置的文本格式样式编号,若无效可尝试其他内置样式编号,或自定义样式节点。
内容的提问来源于stack exchange,提问作者vignesh
相关产品推荐
相关产品推荐

