Таблицы данных: экспорт в форматирование Excel
У меня возникают проблемы при форматировании данных при экспорте в Excel с использованием таблиц данных. Один из моих столбцов содержит десятичную точку и отображается ОК при просмотре в браузере в виде таблицы. Когда я экспортирую таблицу, чтобы преуспеть, это округление числа в этом столбце, это я не хочу, чтобы это произошло. например, показанный в таблице "220419.07109" и при экспорте "220419.0711", я бы предпочел, чтобы это была просто строка для сохранения полного числа.
function formatDataForExport(data, row, column, node) {
var string = data.toString();
return string;
}
function drawDatatable(JSONData) {
var dataSet = [];
table = $("#div").DataTable({
data: dataSet,
columns: columns(),
columnDefs: [{
"targets": columnTargets(showConcludedColumns),
"visible": false,
"searchable": false
}],
info: false,
searching: false,
paging: false,
ordering: false,
autoWidth: true,
responsive: true,
buttons: [{
extend: 'excel',
text: "Export to Excel",
exportOptions: {
columns: ":visible",
format: {
body: formatDataForExport
}
}
}]
});
}
1 ответ
Вы можете использовать следующее решение.
// Get the max value of an attribute of elements' list
var getMaxValue = function(elements, attr) {
var values = elements.map(function(){
return this.getAttribute(attr) || -Infinity;
}).toArray();
return Math.max.apply(Math, values);
}
$('#example').DataTable( {
dom: 'Bfrtip',
columns: [
{ data: 'Number' },
],
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 a custom number format
//Get the available id for the custom number format
var numFmtId = getMaxValue($('numFmts numFmt', styles), 'numFmtId') + 1
//XML Node: Custom number format for the timestamp column
var nFmt = '<numFmt numFmtId="' + numFmtId + '" formatCode="0.######################"/>';
// Add new node
el = $('numFmts', styles);
el.append(nFmt).attr('count', parseInt(el.attr('count'))+1);
//Create our own style to use the custom number format above
//XML Node: Custom style for the timestamp column
var style = '<xf numFmtId="' + numFmtId + '" fontId="0" fillId="0" borderId="0" applyFont="1" applyFill="1" applyBorder="1" xfId="0" applyNumberFormat="1"/>';
// Add new node
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 header row
$('row:gt(0) c[r^="A"]', sheet).attr('s', styleIdx);
},
},
]
} );
Рабочая JSFiddle
Вы можете использовать различные виды форматирования:
- 0. ###################### - покажет столько цифр после десятичной запятой, сколько у вас "#";
- #. ###################### - то же, что и выше, но без 0 в числе, таком как 0,1234;
- 0??????????????????????. - то же, что и выше, но выровнено по десятичной точке
Упрощенная версия, полученный файл правильно открывается в Excel, но ярлыки могут повлиять на другое программное обеспечение для чтения файлов XLSX: JSFiddle