我正在使用jQuery的DataTable 1.10.19和Buttons 1.6.1。导出到excel工作表时,整数列值导出错误,这不存在
一列引用号是后端每行生成的唯一编号。以下是示例
实际列包含值,该值存在于(HTML)表中,并且对于同一行,导出时,该列中还有另一个值。
我检查过,样式也不相同。即,在第一行中,值增加1(与第一行中一样),而在第二行中,值减小1。在最后一行中,值减小5。
注意:具有相同值的相同表,当导出为PDF时,数据将正确导出。
您应该意识到所有导出的值都以0
结尾。实际上,它们全部都舍入为15个非零数字。
如果您将Actual
列中的任何值直接输入到Excel中,您将看到其最后一位被0
代替。
关于此主题的好articles之一提供:
您会在Excel中以多种方式注意到此标准(IEEE 754),但主要是,如果编写的整数超过15位(这是非常可行的),excel会将所有从16th开始的整数转换为零。
因此,当您将1234567890123456789放入一个单元格时,您会得到1234567890123450000。1234567890.123456789也会得到1234567890.123450000!这本身就是一个缺点,但并不能止于此,此限制会影响Excel的所有部分,包括计算。
有没有解决的办法
简短的答案是“否。长的答案是,您可以将更长的数字存储为文本(因此在Excel中以撇号开始书写),您将看到15个以上的整数,但是如果您想将它们转换回数字并使用它们进行计算,则可以将再次只能使用15个整数!
使Excel更精确的唯一方法是使用加载项。有很多,这里有一个例子:xlPrecision
阅读了谢尔盖·努德诺夫先生的回答后,我提出了以下解决方案
buttons: [
{
"extend": 'excel', "text": ' Excel', "className": 'btn btn-flat btn-success fa fa-file-excel-o'
, exportOptions: {
columns: [':visible']
, format: {
body: function (data, row, column, node) {
var cellData;
cellData = data.indexOf("<") < 0 ? data : $(data).text(); // Some cells contains html elements. need to strip off
return column === 2 ? '\u200C' + cellData : cellData;
}
}
}
]
NOTE:column === 2是需要从整数转换为字符串的列的索引。只需使用'\ u200C']前缀/连接单元格值(长数字)>