I'm attempting to export multiple grids to an Excel workbook, with each grid on a different tab. I went through the posting 4 years ago with a similar title and implemented (with some modifications) the code. It worked for the first two grids, but it did not hit the exportEnding callback on the 2nd grid, so it could not recurse into the other grids on the page. I'll paste the two functions in question here so you'll have a better idea.
function ExportGridsToExcel() { var columnsToSkip = ["RowType", "RowFormat", "RowDateFormat"]; var gridIndex = 0; var lengthColumns = gridColumnsArray[gridIndex]; // This will get us to the array of columns for this grid // Loop through each of the column names and skip any columns that start with the name Oversold $.each(lengthColumns, function(index, item) { if (item.key.startsWith("Oversold") && item.key !== "Oversold") { columnsToSkip.push(item.key); } }); var nameToUse = descriptionArray[gridIndex].replace(/ +/g, ' '); // Get the description for this grid and remove extra spaces var workSheetName = nameToUse.substring(0, 31); $.ig.GridExcelExporter.exportGrid($("#mainGrid_" + gridIndex), { fileName: "ForecastExport", worksheetName: workSheetName, columnsToSkip: columnsToSkip }, { exportEnding: function (sender, args) { if (numberOfLayouts > 1) { ExportNextGrid(gridIndex, args.workbook); return false; } else { return true; } } }, { error: function (error) { console.log("Error on export of worksheet " + workSheetName + "Error: " + error); } }); } function ExportNextGrid(gridIndex, workbook) { gridIndex++; // Get to the next grid var columnsToSkip = ["RowType", "RowFormat", "RowDateFormat"]; var lengthColumns = gridColumnsArray[gridIndex]; // This will get us to the array of columns for this grid // Loop through each of the column names and skip any columns that start with the name Oversold $.each(lengthColumns, function(index, item) { if (item.key.startsWith("Oversold") && item.key !== "Oversold") { columnsToSkip.push(item.key); } }); var nameToUse = descriptionArray[gridIndex].replace(/ +/g, ' '); // Get the description for this grid and remove extra spaces var workSheetName = nameToUse.substring(0, 31); var headerArr = []; $.ig.GridExcelExporter.exportGrid($("#mainGrid_" + gridIndex), { fileName: "ForecastExport", worksheetName: workSheetName, columnsToSkip: columnsToSkip }, { headerCellExporting: function (sender, args) { headerArr.push(args.headerText); // Save the names of the headers to assign to the Excel header row if (args.columnIndex === 0) { sender._workbook = workbook; sender._workbook.worksheets().add(sender._worksheet.name()); sender._worksheet = sender._workbook.worksheets(gridIndex); } } }, { exportEnding: function (sender, args) { var row = sender._worksheet.rows(0); // this is the header row // Set the column names for the header row we saved earlier for (var ind = 0; ind < headerArr.length; ind++) { row.setCellValue(ind, headerArr[ind]); } if (gridIndex < numberOfLayouts - 1) { ExportNextGrid(gridIndex, args.workbook); return false; } else { return true; } } }, { error: function (error) { console.log("Error on export of worksheet " + workSheetName + "Error: " + error); } }); }
As you can see I've set it up to recurse into ExportNextGrid, but I've set a breakpoint in the callback for exportEnding and it never gets hit. I can save the spreadsheet and it contains the two grids in different worksheets, but the header row for the 2nd worksheet doesn't have the correct names and it will not recurse to get the other grids.
What am I doing wrong?