public static void ProcessEntireDirectory(LogType t) { String folder; // Create folder picker FileDialog fileDialog = ThisAddIn.app.FileDialog[MsoFileDialogType.msoFileDialogFolderPicker]; fileDialog.AllowMultiSelect = false; if (fileDialog.Show() != -1) { return; } folder = fileDialog.SelectedItems.Item(1); // Prevent showing excel document updates to improve performance ThisAddIn.app.ScreenUpdating = false; string outputFileName = Path.Combine(folder, "processed_all.csv"); string[] files = Directory.GetFiles(folder, Util.GetFileNamePatternForLog(t)); // Quit if no files found if (files.Length == 0) { System.Windows.Forms.MessageBox.Show("No compatible files found in the selected directory."); return; } // Show progress bar ProgressBarForm progress = new ProgressBarForm(); progress.InitializeAndShow(files.Length - 1); FileWriter writer = new FileWriter(outputFileName); // Loop to process multiple files consecutively for (int i = 0; i < files.Length; i++) { ILogProcessor processor = Util.CreateProcessor(t); FileReader reader = new FileReader(files[i]); processor.SetFileName(Path.GetFileName(files[i])); Util.RunPipeline(reader, processor, writer, writeHeader: i == 0); progress.Step(); } writer.Flush(); progress.Done(); System.Windows.Forms.MessageBox.Show("Processed output written to " + outputFileName); }