将jQuery DataTable导出到excel会导出错误的列值

问题描述 投票:0回答:2

我正在使用jQuery的DataTable 1.10.19和Buttons 1.6.1。导出到excel工作表时,整数列值导出错误,这不存在

一列引用号是后端每行生成的唯一编号。以下是示例

enter image description here

实际列包含值,该值存在于(HTML)表中,并且对于同一行,导出时,该列中还有另一个值。

我检查过,样式也不相同。即,在第一行中,值增加1(与第一行中一样),而在第二行中,值减小1。在最后一行中,值减小5。

注意:具有相同值的相同表,当导出为PDF时,数据将正确导出。

datatables export-to-excel
2个回答
1
投票

您应该意识到所有导出的值都以0结尾。实际上,它们全部都舍入为15个非零数字。

如果您将Actual列中的任何值直接输入到Excel中,您将看到其最后一位被0代替。

关于此主题的好articles之一提供:

您会在Excel中以多种方式注意到此标准(IEEE 754),但主要是,如果编写的整数超过15位(这是非常可行的),excel会将所有从16th开始的整数转换为零。

因此,当您将1234567890123456789放入一个单元格时,您会得到1234567890123450000。1234567890.123456789也会得到1234567890.123450000!这本身就是一个缺点,但并不能止于此,此限制会影响Excel的所有部分,包括计算。

有没有解决的办法

简短的答案是“否。长的答案是,您可以将更长的数字存储为文本(因此在Excel中以撇号开始书写),您将看到15个以上的整数,但是如果您想将它们转换回数字并使用它们进行计算,则可以将再次只能使用15个整数!

使Excel更精确的唯一方法是使用加载项。有很多,这里有一个例子:xlPrecision


0
投票

阅读了谢尔盖·努德诺夫先生的回答后,我提出了以下解决方案

    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']前缀/连接单元格值(长数字)>

© www.soinside.com 2019 - 2024. All rights reserved.