我的应用程序中有一个数据表,我需要将其导出到Excel,但是当该数据表以excel导出时,每个单元格的格式类型为“常规”。但是,我希望所有单元格在Excel中以“文本”格式显示。
我尝试将数据转换为String,但仍将结果显示为General。如果我尝试将数据转换为Int,则它会在Excel中以数字格式显示它,但我希望所有内容都为文本格式。
这是我要更改数据类型的功能:
{
"targets": 13,
"render": function (data, type, row){
var d = data.toString();
return d;
}
}
在这里,我仅定位到一列。但是,我想定位所有列。甚至定位到单个列也行不通。
任何帮助将不胜感激。
答案 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);
在上面的代码中添加了一个额外的技巧,以确保仍然将非常大的数字视为文本:
exportOptions: {
format: {
body: function(data, row, column, node) {
return column === 0 ? "\0" + data : data;
}
}
},
JSFiddle已更新