J'utilise jQuery DataTables pour afficher une table comportant plusieurs couleurs de cellule en fonction de la disponibilité des employés au cours de certains mois. J'ai inclus l'extension 'Boutons' des DataTables pour que la table puisse être exportée vers les formats .pdf, .xls. Cependant, je ne suis pas capable d'exporter la table avec toutes ses couleurs de cellule. Les données textuelles dans les cellules sont exportées parfaitement, mais la couleur n'est pas reflétée.Inclure les couleurs d'arrière-plan des colonnes de table lors de l'exportation au format .xls/.pdf
Quelqu'un peut-il suggérer une solution pour cela? J'ai vérifié leur documentation, mais je n'ai trouvé aucune mention d'une API qui permette de l'implémenter.
Voici le code que je l'ai écrit pour réaliser des choses avec des captures d'écran de la sortie
//function to load the forecast data into the table in a proper format
window.loadData = function (data) {
//console.log(data);
//create the table body rows
$.each(data, function (i, val) {
//Append database data here as rows
var trow = $('<tr></tr>');
//set the name first
var tdName = $('<td style="font-size:9pt;white-space: nowrap;">' + val.name + '</td>');
//append it to the row
trow.append(tdName);
//append the forecast columns now
var tdJan = getTabCol(val, 'jan');
trow.append(tdJan);
var tdFeb = getTabCol(val, 'feb');
trow.append(tdFeb);
var tdMar = getTabCol(val, 'mar');
trow.append(tdMar);
var tdApr = getTabCol(val, 'apr');
trow.append(tdApr);
var tdMay = getTabCol(val, 'may');
trow.append(tdMay);
var tdJun = getTabCol(val, 'jun');
trow.append(tdJun);
var tdJul = getTabCol(val, 'jul');
trow.append(tdJul);
var tdAug = getTabCol(val, 'aug');
trow.append(tdAug);
var tdSep = getTabCol(val, 'sep');
trow.append(tdSep);
var tdOct = getTabCol(val, 'oct');
trow.append(tdOct);
var tdNov = getTabCol(val, 'nov');
trow.append(tdNov);
var tdDec = getTabCol(val, 'dec');
trow.append(tdDec);
//append the row to the table
$('#tabForecastBody').append(trow);
});
//make the table a datatable
var table = $('#tabForecast').DataTable({
"paging": true,
"bLengthChange": true,
"bFilter": false,
"lengthMenu": [[6, 15, 25, 30], [6, 15, 25, 30]],
"language": {
"emptyTable": "No data to show"
},
dom: 'Bfrtip',
buttons: [
//'copy', 'csv', 'excel', 'pdf', 'print'
{
extend: 'excelHtml5',
title: 'Resource Allocation'
},
{
extend: 'pdfHtml5',
title: 'Resource Allocation',
//text: '<span class="glyphicon glyphicon-search"></span>'
},
//{
// extend: 'csvHtml5',
// title: 'Resource Allocation'
//},
//{
// extend: 'copyHtml5',
// title: 'Resource Allocation'
//},
{
extend: 'print',
title: 'Resource Allocation',
//exportOptions: {
// columns: [0, 1, 2, 5]
//}
}
],
order: [],
columnDefs: [{ "targets": 0, "orderable": false },
{ "targets": 1, "orderable": false },
{ "targets": 2, "orderable": false },
{ "targets": 3, "orderable": false },
{ "targets": 4, "orderable": false },
{ "targets": 5, "orderable": false },
{ "targets": 6, "orderable": false },
{ "targets": 7, "orderable": false },
{ "targets": 8, "orderable": false },
{ "targets": 9, "orderable": false },
{ "targets": 10, "orderable": false },
{ "targets": 11, "orderable": false },
{ "targets": 12, "orderable": false }]
});
}
//function to return the value of table column
window.getTabCol = function (val, key) {
var td = null;
for (var prop in val) {
if (prop === key) {
//now split the prop text based on '^'
var allData = val[prop].split('^');
//now create the td
td = $('<td style = "background-color:' + allData[1] + ';cursor:pointer;color:black;font-size:10pt;text-align:center;" title = "' + allData[0] + '" >' + allData[2] + '</td>');
}
}
//now return the newly created column
return td;
}
Merci pour votre réponse. Je vais essayer cela et vous permettra de connaître les résultats. Ma question est maintenant, cette approche fonctionne-t-elle pour exporter pour exceller aussi? – IamRuku
@IamRuku - Non, lisez la section de description [** ici **] (https://datatables.net/reference/button/excelHtml5). dataTables s'intègre à diverses bibliothèques open source afin de produire les exports, ces libs ont des API et des objectifs différents. dataTables ne prend pas en charge la personnalisation détaillée lors de l'exportation de PDF par exemple, mais parce que pdfmake _itself_ prend réellement en charge la personnalisation détaillée, vous pouvez le faire par un codage astucieux. Malheureusement, les bibliothèques utilisées pour l'exportation vers Excel n'ont pas de telles capacités intégrées, et par conséquent, ce n'est pas possible. – davidkonrad
.. suite) - Je dois admettre que je ne vois pas pourquoi quelqu'un voudrait que le style HTML soit exporté vers Excel. Le but d'un PDF est un document stylé en lecture seule que vous pouvez envoyer par e-mail, imprimer ou publier sur le Web - le but d'une feuille de calcul Excel est d'exporter les données pour pouvoir continuer à travailler dans Excel (je suppose). – davidkonrad