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

时间:2018-08-10 05:41:46

标签: javascript jquery datatable datatables phpexcel

我的应用程序中有一个数据表,我需要将其导出到Excel,但是当该数据表以excel导出时,每个单元格的格式类型为“常规”。但是,我希望所有单元格在Excel中以“文本”格式显示。

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

这是我要更改数据类型的功能:

{
   "targets": 13,
   "render": function (data, type, row){
       var d = data.toString();
       return d;
       }
}

在这里,我仅定位到一列。但是,我想定位所有列。甚至定位到单个列也行不通。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

$('#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;
                    }
                }
            },
        },
    ]
} );

这里是JSFiddle

在此示例中,我们使用列0('A')。
对于第13列,请使用以下代码:

                //Set new style default for the column (optional)
                $('col:eq(13)', sheet).attr('style', styleIdx);
                //Apply new style to the existing rows of the 13th column ('N')
                //Skipping the header row
                $('row:gt(0) c[r^="N"]', sheet).attr('s', styleIdx);

2019年4月4日更新

在上面的代码中添加了一个额外的技巧,以确保仍然将非常大的数字视为文本:

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

JSFiddle已更新