/// <summary> /// Writes the results. /// </summary> /// <returns>The results.</returns> /// <param name="path">Path.</param> WorkBookStatus WriteResults(Stream path) { if (!queryRan) { throw new WorkbookNotStartedException(); } switch (runParameters.BackendMethod) { case ExcelBackend.Xlsx: pts = new XlsxParts(path); break; // FIXME this isnt an xml backend case ExcelBackend.Xml: pts = new XlsxParts(path); break; default: pts = new XlsxParts(path); break; } WorkbookTracking w = new WorkbookTracking(); // start to keep track of the result sets int resultSetTotal = 1; // loop through the result sets and write the results while (queryReader.MoveToNextResultSet()) { // if this result set is over the max results per workbook, close this one and indicate a break has happened if (resultSetTotal > runParameters.MaximumResultSetsPerWorkbook) { OnSave("Saving incremental result..."); pts.Close(); return(WorkBookStatus.BreakCompleted); } resultSetTotal++; // write empty columns if requested if (runParameters.WriteEmptyResultSetColumns) { InitSheet(w); } // loop through all result sets while (queryReader.MoveNext()) { if (!w.WorksheetOpen) { InitSheet(w); } if (w.WorksheetOpen) { this.DetermineIfRowDependsOnPreviousRow(w); queryReader.Reset(); // write the row, or determine why we couldn't write the row WriteARow(w); // if we're over-size, we must return now // but keep the query open bc the caller may request to write the rest of the results if (w.Status == WorkBookStatus.OverSize) { OnSave("Saving incremental result..."); if (w.WorksheetOpen) { pts.CloseSheet(); } pts.Close(); return(w.Status); } } } if (w.WorksheetOpen) { pts.CloseSheet(); w.WorksheetOpen = false; w.RowCount = 0; } } OnSave("Saving final result..."); pts.Close(); QueryClose(); return(WorkBookStatus.Completed); }