Javascript 将jQuery数据表导出到Excel时的表格单元格格式

Javascript 将jQuery数据表导出到Excel时的表格单元格格式,javascript,jquery,datatable,datatables,phpexcel,Javascript,Jquery,Datatable,Datatables,Phpexcel,我的应用程序中有一个需要导出到Excel的datatable,但在Excel中导出datatable时,每个单元格的格式类型为“General”。但是,我希望我的所有单元格在Excel中以“文本”格式显示 我尝试将数据转换为字符串,但它通常仍显示结果。如果我尝试将数据转换为Int,那么它会在Excel中以数字格式显示,但我希望所有内容都以文本格式显示 以下是我试图更改数据类型的函数: { "targets": 13, "render": function (data, type, r

我的应用程序中有一个需要导出到Excel的datatable,但在Excel中导出datatable时,每个单元格的格式类型为“General”。但是,我希望我的所有单元格在Excel中以“文本”格式显示

我尝试将数据转换为字符串,但它通常仍显示结果。如果我尝试将数据转换为Int,那么它会在Excel中以数字格式显示,但我希望所有内容都以文本格式显示

以下是我试图更改数据类型的函数:

{
   "targets": 13,
   "render": function (data, type, row){
       var d = data.toString();
       return d;
       }
}
这里我只针对一个专栏。但是,我希望以我的所有列为目标。即使只针对一个专栏也行不通


任何帮助都将不胜感激。

您可以应用以下代码来完成任务:

$('#example').DataTable( {
    dom: 'Bfrtip',
    columns: [
        { data: 'name' },
        { data: 'surname' },
        { data: 'position' },
        { data: 'office' },
        { data: 'salary' }
    ],
    buttons: [
        {
            extend: 'excelHtml5',
            customize: function(xlsx) {
                //Get the built-in styles
                //refer buttons.html5.js "xl/styles.xml" for the XML structure
                var styles = xlsx.xl['styles.xml'];

                //Create our own style to use the "Text" number format with id: 49
                var style = '<xf numFmtId="49" fontId="0" fillId="0" borderId="0" xfId="0" applyFont="1" applyFill="1" applyBorder="1" applyNumberFormat="1"/>';
                // Add new node and update counter
                el = $('cellXfs', styles);
                el.append(style).attr('count', parseInt(el.attr('count'))+1);
                // Index of our new style
                var styleIdx = $('xf', el).length - 1;

                //Apply new style to the first (A) column
                var sheet = xlsx.xl.worksheets['sheet1.xml'];
                //Set new style default for the column (optional)
                $('col:eq(0)', sheet).attr('style', styleIdx);
                //Apply new style to the existing rows of the first column ('A')
                //Skipping the header row
                $('row:gt(0) c[r^="A"]', sheet).attr('s', styleIdx);
            },
            exportOptions: {
                format: {
                    body: function(data, row, column, node) {
                        return column === 0 ? "\0" + data : data;
                    }
                }
            },
        },
    ]
} );

更新日期:2019年4月4日 在上面的代码中添加了一个额外的技巧,以确保非常大的数字仍被视为文本:

exportOptions: {
    format: {
        body: function(data, row, column, node) {
            return column === 0 ? "\0" + data : data;
        }
    }
},

JSFIDLE已更新

numFmtId=“49”是Excel中文本单元格格式的预定义ID。您可以通过解压缩测试XLSX文件并分析xl\styles.xml和xl\worksheets\sheet1.xml来获得它,试图找到USPS跟踪编号的解决方案,即“92001902416755000004290987”。此脚本不适用于此格式。虽然它将单元格样式设置为数字格式“文本”,但值仍然显示不正确。例如,上述值最终为“9.2001902416755E+25”。我渴望找到一种方法来实现这一点。2019年4月4日的更新为我提供了“52100350002002002094983”之类的数据。如果我能帮助您,请您查看我对您问题的答案,并单击答案分数下的
v
,将答案标记为已接受。非常感谢。
exportOptions: {
    format: {
        body: function(data, row, column, node) {
            return column === 0 ? "\0" + data : data;
        }
    }
},