I am trying to export my master and detail grid to an excel file without success.
When I am debugging I can see that the function $.when.apply(null, detailExportPromises) isn't called.
The detail grid data is found correctly, but no Excel file is downloaded.
My code:
//Add export to excel option for main grid
gridElement.data("kendoGrid").setOptions({
excel: {
allPages: true,
fileName: "Pikdonot.xlsx",
filterable: true
},
excelExport: function (e) {
debugger;
e.preventDefault();
var workbook = e.workbook;
detailExportPromises = [];
var masterData = e.data;
for (var rowIndex = 0; rowIndex < masterData.length; rowIndex++) {
exportChildData(masterData[rowIndex].uid, rowIndex);
}
debugger;
$.when.apply(null, detailExportPromises)
.then(function () {
debugger;
// get the export results
var detailExports = $.makeArray(arguments);
// sort by masterRowIndex
detailExports.sort(function (a, b) {
return a.masterRowIndex - b.masterRowIndex;
});
// add an empty column
workbook.sheets[0].columns.unshift({
width: 30
});
// prepend an empty cell to each row
for (var i = 0; i < workbook.sheets[0].rows.length; i++) {
workbook.sheets[0].rows[i].cells.unshift({});
}
// merge the detail export sheet rows with the master sheet rows
// loop backwards so the masterRowIndex doesn't need to be updated
for (var i = detailExports.length - 1; i >= 0; i--) {
var masterRowIndex = detailExports[i].masterRowIndex + 1; // compensate for the header row
var sheet = detailExports[i].sheet;
// prepend an empty cell to each row
for (var ci = 0; ci < sheet.rows.length; ci++) {
if (sheet.rows[ci].cells[0].value) {
sheet.rows[ci].cells.unshift({});
}
}
// insert the detail sheet rows after the master row
[].splice.apply(workbook.sheets[0].rows, [masterRowIndex + 1, 0].concat(sheet.rows));
}
// save the workbook
kendo.saveAs({
dataURI: new kendo.ooxml.Workbook(workbook).toDataURL(),
fileName: "PikdonotDetails.xlsx"
});
});
},
toolbar: ["excel"]
});
function exportChildData(uid, rowIndex) {
debugger;
var deferred = $.Deferred();
detailExportPromises.push(deferred);
var rows = [{
cells: [
// First cell
{ value: "YaadPeraon" },
// Second cell
{ value: "TaarichErech" },
// Third cell
{ value: "AdditionalDetails" },
// Fourth cell
{ value: "IsNew" }
]
}];
var grid = $('#depositsResultGrid').find("tr[data-uid='" + uid + "']").next().find(".closedDepositTrackingResultGrid").data("kendoGrid");
if (grid) {
var data = grid.dataSource.data();
var exporter = new kendo.ExcelExporter({
columns: [{
field: "YaadPeraon"
}, {
field: "TaarichErech"
}, {
field: "AdditionalDetails"
}, {
field: "IsNew"
}],
dataSource: {
data: data
}
});
exporter.workbook().then(function (book, data) {
debugger;
deferred.resolve({
masterRowIndex: rowIndex,
sheet: book.sheets[0]
});
});
}
}