Datatables/TableTools:导出到Excel时将数据格式化为文本

use*_*510 6 javascript excel datatables export-to-excel tabletools

我正在使用Datatables TableTools插件,以便为我页面上的表提供"导出到Excel"选项.

一般来说,一切都按预期工作.我唯一的问题是我需要所有数据.生成的Excel表格中的列被格式化为文本,否则我将丢失某些列中的数据.

示例: - 我有一个具有前导零(例如0022)的列,22如果未将其格式化为文本,则只会在Excel文件中显示前导零(例如).- 另一列包含19位帐号(例如1234567890123456789),1234567890123450000如果未将其格式化为文本,则最后四位数字将在Excel文件中更改为零(例如).

有没有什么办法可以在我的Datatables/TableTools初始化中设置它,以便它总是将所有数据作为文本导出到Excel文件中?

蒂姆,非常感谢你提供的任何帮助.

小智 15

我尝试了Aureltime给出的第一个选项,但我发现了一点副作用.如果列仅包含数字并且您使用渲染功能,则排序选项不起作用.希望从1.10.12 datatables版本开始,有一个新选项可以在创建excel文件之前自定义数据.

在这个自定义功能中,我添加了/ u002C,它工作完美,甚至是数字的排序.

        "buttons": [{
            extend: 'excel',
            exportOptions: {
                orthogonal: 'sort'
            },
            customizeData: function ( data ) {
                for (var i=0; i<data.body.length; i++){
                    for (var j=0; j<data.body[i].length; j++ ){
                        data.body[i][j] = '\u200C' + data.body[i][j];
                    }
                }
            }               
            }],
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供此解决方案。我在专栏的render函数中使用了你的想法,如下:render: function (data){return '\u200C'+data}。现在 Excel 导出将数字视为字符串。 (2认同)

Ric*_*eco 5

我有这个问题的解决方案。

很多时候我的头都碎了……所以解释如下:

  1. 它在 DatatableJS 版本 1.10.11 中修复工作正常(用于 HTML Excel 导出选项)
  2. 打开 datatables.js 并搜索:“DataTable.ext.buttons.excelHtml5 = {”
  3. 在以下行中搜索,直到获取此代码,并对其进行注释:

             cells.push( typeof row[i] === 'number' || (row[i].match && $.trim(row[i]).match(/^-?\d+(\.\d+)?$/) && row[i].charAt(0) !== '0') ?
                '<c t="n"><v>'+row[i]+'</v></c>' :
                '<c t="inlineStr"><is><t>'+(
                    ! row[i].replace ?
                        row[i] :
                        row[i]
                            .replace(/&(?!amp;)/g, '&amp;')
                            .replace(/</g, '&lt;')
                            .replace(/>/g, '&gt;')
                            .replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, ''))+ // remove control characters
                '</t></is></c>'                                                      // they are not valid in XML
            );
    
    Run Code Online (Sandbox Code Playgroud)
  4. 把这个新代码:

                cells.push( '<c t="inlineStr"><is><t>'+(
                            ! row[i].replace ?
                                row[i] :
                                row[i]
                                    .replace(/&(?!amp;)/g, '&amp;')
                                    .replace(/</g, '&lt;')
                                    .replace(/>/g, '&gt;')
                                    .replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, ''))+ // remove control characters
                        '</t></is></c>'                                                      // they are not valid in XML
                    );
    
    Run Code Online (Sandbox Code Playgroud)
  5. 保存您的 datatables.js

  6. 永远享受你神圣的文本单元!!

此解决方案有助于维护数字、日期和十进制格式。

我更改了代码以强制以文本格式将所有值从 HTML 写入 XLSX。

如果有人对此解决方案有疑问,我将尝试回答所有问题。

谢谢大家。


TPe*_*ete 4

TableTools 不会创建真正的 excel文件,而是创建一个csv文件。这些仅包含原始数据,没有格式。尽管存在前导零,但 Excel 通常不会显示它们。您在这里有多种选择:

  • 从 Excel 中更改格式
  • 从 Excel 的打开对话框中打开csv文件,您应该能够将列标记为文本(您可能需要将文件类型更改为txt
  • 在数据周围添加引号
  • 通过一些外部库创建一个真正的Excel 文件