FIX_BDS_EXCEL_EXPORT
This commit is contained in:
parent
99a48f3130
commit
876ef10958
@ -176,40 +176,166 @@ $(document).ready(function() {
|
|||||||
dom: "<'row'<'col-sm-6'f><'col-sm-6 text-right'B>>" + // Filter left, buttons right
|
dom: "<'row'<'col-sm-6'f><'col-sm-6 text-right'B>>" + // Filter left, buttons right
|
||||||
"<'row'<'col-sm-12'tr>>" +
|
"<'row'<'col-sm-12'tr>>" +
|
||||||
"<'row'<'col-sm-5'i><'col-sm-7'p>>", // Pagination at the bottom, without page length selector
|
"<'row'<'col-sm-5'i><'col-sm-7'p>>", // Pagination at the bottom, without page length selector
|
||||||
|
// buttons: [
|
||||||
|
// {
|
||||||
|
// extend: 'csv',
|
||||||
|
// text: 'CSV',
|
||||||
|
// title: 'Policy-Tranction-BDS-List',
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// extend: 'excel',
|
||||||
|
// text: 'Excel',
|
||||||
|
// title: 'Policy-Tranction-BDS-List',
|
||||||
|
// customize: function(xlsx) {
|
||||||
|
// var sheet = xlsx.xl.worksheets['sheet1.xml'];
|
||||||
|
// var total = 0;
|
||||||
|
|
||||||
|
// // 🔹 Force column K (11) and L (12) as string
|
||||||
|
// $('row c[r^="K"], row c[r^="L"]', sheet).attr('t', 'inlineStr');
|
||||||
|
|
||||||
|
// // Find cells in column AB (28th column in Excel)
|
||||||
|
// $('row c[r^="AB"]', sheet).each(function() {
|
||||||
|
// var value = parseFloat($('v', this).text()); // Get the value inside the cell
|
||||||
|
// if (!isNaN(value)) {
|
||||||
|
// total += value;
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// // Get the last row index and append the total row
|
||||||
|
// var lastRow = $('row:last', sheet);
|
||||||
|
// var rowIndex = parseInt(lastRow.attr('r')) + 2; // Find the next row index
|
||||||
|
// var totalRow = '<row r="' + rowIndex + '">' +
|
||||||
|
// '<c t="inlineStr" r="AA' + rowIndex + '"><is><t>Total</t></is></c>' + // Insert "Total" in AA
|
||||||
|
// '<c t="n" r="AB' + rowIndex + '"><v>' + total.toFixed(2) + '</v></c>' + // Insert sum in AB
|
||||||
|
// '</row>';
|
||||||
|
|
||||||
|
// // Append the new total row to the sheet
|
||||||
|
// $(sheet).find('sheetData').append(totalRow);
|
||||||
|
// },
|
||||||
|
// exportOptions: {
|
||||||
|
// orthogonal: 'sort'
|
||||||
|
// },
|
||||||
|
// customizeData: function (data) {
|
||||||
|
// for (var i = 0; i < data.body.length; i++) {
|
||||||
|
// for (var j = 0; j < data.body[i].length; j++) {
|
||||||
|
// // Check if the column is the 9th index (10th column) and 10th index (11th column)
|
||||||
|
// if (j === 9 || j === 10) {
|
||||||
|
// data.body[i][j] = '\u200C' + data.body[i][j];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// ],
|
||||||
buttons: [
|
buttons: [
|
||||||
{
|
{
|
||||||
extend: 'csv',
|
extend: 'csv',
|
||||||
text: 'CSV',
|
text: 'CSV',
|
||||||
title: 'Policy-Tranction-BDS-List',
|
title: 'Policy-Tranction-BDS-List',
|
||||||
|
customizeData: function (data) {
|
||||||
|
for (var i = 0; i < data.body.length; i++) {
|
||||||
|
for (var j = 0; j < data.body[i].length; j++) {
|
||||||
|
// force text format by prefixing a tab
|
||||||
|
data.body[i][j] = '\t' + data.body[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
extend: 'excel',
|
extend: 'excel',
|
||||||
text: 'Excel',
|
text: 'Excel',
|
||||||
title: 'Policy-Tranction-BDS-List',
|
title: 'Policy-Tranction-BDS-List',
|
||||||
customize: function(xlsx) {
|
// customize: function (xlsx) {
|
||||||
|
// var sheet = xlsx.xl.worksheets['sheet1.xml'];
|
||||||
|
// var total = 0;
|
||||||
|
|
||||||
|
// // 🔹 Force column K (11) and L (12) as string
|
||||||
|
// // $('row c[r^="K"], row c[r^="L"]', sheet).attr('t', 'inlineStr');
|
||||||
|
// // 🔹 Convert column K (11th) & L (12th) to inline string
|
||||||
|
// $('row c[r^="K"], row c[r^="L"]', sheet).each(function () {
|
||||||
|
// var cell = $(this);
|
||||||
|
// console.log(cell);
|
||||||
|
// var val = cell.find('v').text(); // get value
|
||||||
|
// if (val) {
|
||||||
|
// cell.attr('t', 'inlineStr'); // mark as text
|
||||||
|
// cell.remove('v'); // remove <v>
|
||||||
|
// cell.append('<is><t>' + val + '</t></is>'); // replace with inline string
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// // Calculate total in AB (28th column)
|
||||||
|
// $('row c[r^="AB"]', sheet).each(function () {
|
||||||
|
// var value = parseFloat($('v', this).text());
|
||||||
|
// if (!isNaN(value)) {
|
||||||
|
// total += value;
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
|
||||||
|
// // Append total row
|
||||||
|
// var lastRow = $('row:last', sheet);
|
||||||
|
// var rowIndex = parseInt(lastRow.attr('r')) + 2;
|
||||||
|
// var totalRow = '<row r="' + rowIndex + '">' +
|
||||||
|
// '<c t="inlineStr" r="AA' + rowIndex + '"><is><t>Total</t></is></c>' +
|
||||||
|
// '<c t="n" r="AB' + rowIndex + '"><v>' + total.toFixed(2) + '</v></c>' +
|
||||||
|
// '</row>';
|
||||||
|
|
||||||
|
// $(sheet).find('sheetData').append(totalRow);
|
||||||
|
// },
|
||||||
|
customize: function (xlsx) {
|
||||||
var sheet = xlsx.xl.worksheets['sheet1.xml'];
|
var sheet = xlsx.xl.worksheets['sheet1.xml'];
|
||||||
var total = 0;
|
var total = 0;
|
||||||
|
|
||||||
// 🔹 Force column K (11) and L (12) as string
|
function forceAsText(cell) {
|
||||||
$('row c[r^="K"], row c[r^="L"]', sheet).attr('t', 'inlineStr');
|
var val = cell.find('v').text();
|
||||||
|
if (val) {
|
||||||
|
// Remove old <v>
|
||||||
|
cell.find('v').remove();
|
||||||
|
|
||||||
// Find cells in column AB (28th column in Excel)
|
// Force as inline string
|
||||||
$('row c[r^="AB"]', sheet).each(function() {
|
cell.attr('t', 'inlineStr');
|
||||||
var value = parseFloat($('v', this).text()); // Get the value inside the cell
|
cell.append('<is><t>' + val + '</t></is>');
|
||||||
if (!isNaN(value)) {
|
|
||||||
total += value;
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function forceAsTextPreserveOriginal(cell) {
|
||||||
|
// Get the original cell value from the cell's text content
|
||||||
|
var vElement = cell.find('v');
|
||||||
|
if (vElement.length > 0) {
|
||||||
|
var originalValue = vElement.text();
|
||||||
|
|
||||||
|
// Remove the <v> element
|
||||||
|
vElement.remove();
|
||||||
|
|
||||||
|
// Set cell type to inline string and preserve the original value
|
||||||
|
cell.attr('t', 'inlineStr');
|
||||||
|
cell.append('<is><t>' + originalValue + '</t></is>');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🔹 Force K column as text (working correctly)
|
||||||
|
$('row c[r^="K"]', sheet).each(function () {
|
||||||
|
forceAsText($(this));
|
||||||
});
|
});
|
||||||
|
|
||||||
// Get the last row index and append the total row
|
// 🔹 Force L column as text with better preservation
|
||||||
|
$('row c[r^="L"]', sheet).each(function () {
|
||||||
|
forceAsTextPreserveOriginal($(this));
|
||||||
|
});
|
||||||
|
|
||||||
|
// 🔹 Calculate total in AB (28th column)
|
||||||
|
$('row c[r^="AB"] v', sheet).each(function () {
|
||||||
|
var value = parseFloat($(this).text());
|
||||||
|
if (!isNaN(value)) total += value;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 🔹 Append total row
|
||||||
var lastRow = $('row:last', sheet);
|
var lastRow = $('row:last', sheet);
|
||||||
var rowIndex = parseInt(lastRow.attr('r')) + 2; // Find the next row index
|
var rowIndex = parseInt(lastRow.attr('r')) + 2;
|
||||||
var totalRow = '<row r="' + rowIndex + '">' +
|
var totalRow = '<row r="' + rowIndex + '">' +
|
||||||
'<c t="inlineStr" r="AA' + rowIndex + '"><is><t>Total</t></is></c>' + // Insert "Total" in AA
|
'<c t="inlineStr" r="AA' + rowIndex + '"><is><t>Total</t></is></c>' +
|
||||||
'<c t="n" r="AB' + rowIndex + '"><v>' + total.toFixed(2) + '</v></c>' + // Insert sum in AB
|
'<c t="n" r="AB' + rowIndex + '"><v>' + total.toFixed(2) + '</v></c>' +
|
||||||
'</row>';
|
'</row>';
|
||||||
|
|
||||||
// Append the new total row to the sheet
|
|
||||||
$(sheet).find('sheetData').append(totalRow);
|
$(sheet).find('sheetData').append(totalRow);
|
||||||
},
|
},
|
||||||
exportOptions: {
|
exportOptions: {
|
||||||
@ -218,8 +344,8 @@ $(document).ready(function() {
|
|||||||
customizeData: function (data) {
|
customizeData: function (data) {
|
||||||
for (var i = 0; i < data.body.length; i++) {
|
for (var i = 0; i < data.body.length; i++) {
|
||||||
for (var j = 0; j < data.body[i].length; j++) {
|
for (var j = 0; j < data.body[i].length; j++) {
|
||||||
// Check if the column is the 9th index (10th column) and 10th index (11th column)
|
// Force 10th (index 9) & 11th (index 10) as text
|
||||||
if (j === 9 || j === 10) {
|
if (j === 9 || j === 10 || j === 11 || j === 12 ) {
|
||||||
data.body[i][j] = '\u200C' + data.body[i][j];
|
data.body[i][j] = '\u200C' + data.body[i][j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -227,6 +353,7 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
language: {
|
language: {
|
||||||
search: "_INPUT_",
|
search: "_INPUT_",
|
||||||
searchPlaceholder: "Search..."
|
searchPlaceholder: "Search..."
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user