Here’s some basic for automating Excel from C#.
Make sure you dereference your Excel COM objects
Actually I’m going to start with a word of caution. When interacting with Excel you need to ensure that you dereference any Excel objects after use or you’ll find Excel remains in memory when you probably thought it had been closed.
To correctly deal with Excel’s COM objects the best thing to do is store each object in a variable and when you’ve finished with it, make sure you set that variable to null. Accessing some Excel objects using simply dot notation such as
application.Workbooks[0].Sheets[1];
will result in COM objects being created but without your application having a reference to them they’ll remain referenced long after you expect.
Instead do things like
var workbooks = application.Workbooks[0]; var workSheet = workbooks.Sheets[1];
If in doubt, check via Task Manager to see if your instance of Excel has been closed.
Starting Excel
var application = new Excel.Application(); var workbook = application.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); Excel.Worksheet worksheet = workbook.Sheets[1]; application.Visible = true;
Setting Cell data
worksheet.Cells[row, column++] = cell.Value != null ? cell.Value.ToString() : String.Empty;
Grouping a range
Excel.Range range = worksheet.Rows[String.Format("{0}:{1}", row, row + children)]; range.OutlineLevel = indent; range.Group(Missing.Value, Missing.Value, Missing.Value, Missing.Value);
Change the background colour
worksheet.Rows[row].Interior.Color = Excel.XlRgbColor.rgbRed;
Change the background colour from a Color object
We can use the built-in colour conversion code, which from WPF would mean converting to a System.Drawing.Color, as per this
System.Drawing.Color clr = System.Drawing.Color.FromArgb(solid.Color.A, solid.Color.R, solid.Color.G, solid.Color.B);
Now we can use this as follows
worksheet.Rows[row].Interior.Color = ColorTranslator.ToOle(clr);
or we can do this ourselves using
int clr = solid.Color.R | solid.Color.G << 8 | solid.Color.B << 16; worksheet.Rows[row].Interior.Color = clr;
Changing the foreground colour
int clr = solid.Color.R | solid.Color.G << 8 | solid.Color.B << 16; worksheet.Rows[row].Font.Color = clr;
References
https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.aspx