public override void Generate(ICollection <Table> inputTables, Stream outputStream) { Logger.Info("Created ZIP file."); var progressReporter = new ProgressReporter("CsvExporter", Parameters.Instance.Targets.Databases.Count(), s => Console.Error.WriteLine(s)); using (var zipArchive = new ZipArchive(outputStream, ZipArchiveMode.Create)) { var tableIndex = 0; foreach (var table in inputTables) { if (!Parameters.Instance.ShowInformationMessages && table.Id == Table.InformationMessagesId && inputTables.Count > 1) { continue; } Logger.Info("Adding new CSV file."); var partName = GetPartName(table, tableIndex); AddCsv(zipArchive, table, partName); progressReporter.Increment(); tableIndex++; } progressReporter.Done(); MemoryManager.Clean(); var target = GetLogTableTarget(); // Showing built-in parts with the diagnostic. var forceBuiltInSheets = tableIndex == 0; if (forceBuiltInSheets) { Logger.Warn("No data sets to export. Forcing built-in parts."); } Logger.Info("CSV file logging horizon. Check console output to see beyond horizon."); if (Parameters.Instance.ShowLogSheet || forceBuiltInSheets) { var logTable = target.Logs; var partName = GetPartName(logTable, tableIndex++); AddCsv(zipArchive, logTable, partName); } if (Parameters.Instance.ShowParameterSheet || forceBuiltInSheets) { var parameterTable = ParametersToTable(Parameters.Instance); var partName = GetPartName(parameterTable, tableIndex++); AddCsv(zipArchive, parameterTable, partName); } MemoryManager.Clean(); Logger.Info("Finalizing CSV file writing."); } }
public override void Generate(ICollection <Table> inputTables, Stream outputStream) { using (var spreadSheet = SpreadsheetDocument.Create(outputStream, SpreadsheetDocumentType.Workbook)) { Logger.Info("Created excel file."); spreadSheet.AddWorkbookPart(); var wbsp = spreadSheet.WorkbookPart.AddNewPart <WorkbookStylesPart>(); wbsp.Stylesheet = CreateStylesheet(); wbsp.Stylesheet.Save(); spreadSheet.WorkbookPart.Workbook = new Workbook { Sheets = new Sheets() }; var progressReporter = new ProgressReporter("ExcelExporter", Parameters.Instance.Targets.Databases.Count(), s => Console.Error.WriteLine(s)); var tableIndex = 0; foreach (var table in inputTables) { if (!Parameters.Instance.ShowInformationMessages && table.Id == Table.InformationMessagesId && inputTables.Count > 1) { continue; } Logger.Info("Adding new excel sheet."); if (table.Rows.Count > ExcelTotalNumberRowsMaximumLimit - 1) { Logger.Error($"Table '{table.Id}' not exported in excel file because it had too many rows. The table has {table.Rows.Count} rows and {table.Columns.Length} columns. The maximum number of rows supported by excel is {ExcelTotalNumberRowsMaximumLimit}."); continue; } var sheetName = GetPartName(table, tableIndex); AddSheet(spreadSheet, table, sheetName); progressReporter.Increment(); tableIndex++; } progressReporter.Done(); MemoryManager.Clean(); var target = GetLogTableTarget(); // If no data sheets were added, we must force adding built-in sheets because an excel file without sheet would be invalid. // Showing built-in sheets also helps with the diagnostic. var forceBuiltInSheets = tableIndex == 0; if (forceBuiltInSheets) { Logger.Warn("No data sets to export. Forcing built-in sheets."); } Logger.Info("Excel file logging horizon. Check console output to see beyond horizon."); if (Parameters.Instance.ShowLogSheet || forceBuiltInSheets) { var logTable = target.Logs; var partName = GetPartName(logTable, tableIndex++); AddSheet(spreadSheet, logTable, partName); } if (Parameters.Instance.ShowParameterSheet || forceBuiltInSheets) { var parameterTable = ParametersToTable(Parameters.Instance); var partName = GetPartName(parameterTable, tableIndex++); AddSheet(spreadSheet, parameterTable, partName); } MemoryManager.Clean(); Logger.Info("Finalizing excel file writing."); } }