This will be the last Bite Size C# post revolving around CSV and XLS files (for a while at least). The next one will be on a different and probably a bit more exciting topic.
Today we will look at my XLS File Merger, which resides in the Core.XLS namespace of my Core.dll library. It is a static class with one static method MergeFiles. The purpose of this method is to merge 2 or more XLS files into a single file, i.e. taking the worksheets of 2 or more files and combing them into a single file. The MergeFiles method takes 2 arguments: a list of locations of files to be merged (filePathList) and the destination file that will be created (outputFile).
Here is the code:
using System; using Microsoft.Office.Interop.Excel; namespace Core.XLS { public static class XlsFileMerge { public static void MergeFiles(string[] filePathList, string outputFile) { var app = new Application {Visible = false}; app.Workbooks.Add(""); foreach (var file in filePathList) { app.Workbooks.Add(file); } for (var i = 2; i <= app.Workbooks.Count; i++) { var count = app.Workbooks[i].Worksheets.Count; app.Workbooks[i].Activate(); for (var j = 1; j <= count; j++) { var ws = (_Worksheet) app.Workbooks[i].Worksheets[j]; if (ws.UsedRange.Rows.Count <= 1) continue; ws.Select(Type.Missing); ws.Cells.Select(); var sel = (Range) app.Selection; sel.Copy(Type.Missing); var sheet = (_Worksheet) app.Workbooks[1].Worksheets.Add( Type.Missing, Type.Missing, Type.Missing, Type.Missing ); sheet.Name = ws.Name; sheet.Paste(Type.Missing, Type.Missing); } } app.Workbooks[1].SaveAs(@outputFile); app.Quit(); } } }