The following code snippet I have is a function that accepts a rectangular matrix of strings and a path to write an xls file. It puts the contents of the matrix into the cells of the Excel sheet, and applies some formatting based on the contents:
public static void WriteXL(string[,] matrix, string path)
{
XL.Application app = new XL.Application();
XL.Workbook wbk = app.Workbooks.Add();
XL.Worksheet wsht = wbk.Worksheets.Add();
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
int _i = i + 1;
int _j = j + 1;
if (matrix[i, 0] == "Day" || matrix[i, 0] == "Date")
{
wsht.Cells[_i, _j].Font.Bold = true;
wsht.Cells[_i, _j].Font.Italic = false;
wsht.Cells[_i, _j].Style.Font.Name = "Arial";
wsht.Cells[_i, _j].Style.Font.Size = 12;
wsht.Cells[_i, _j].Style.Interior.Color = NumberFromColor(Color.Yellow);
}
else if (j == 0)
{
wsht.Cells[_i, _j].Font.Bold = false;
wsht.Cells[_i, _j].Font.Italic = true;
wsht.Cells[_i, _j].Style.Font.Name = "Arial";
wsht.Cells[_i, _j].Style.Font.Size = 12;
wsht.Cells[_i, _j].Style.Interior.Color = NumberFromColor(Color.Beige);
}
else
{
wsht.Cells[_i, _j].Font.Bold = false;
wsht.Cells[_i, _j].Font.Italic = false;
wsht.Cells[_i, _j].Style.Font.Name = "Arial";
wsht.Cells[_i, _j].Style.Font.Size = 10;
wsht.Cells[_i, _j].Style.Interior.Color = NumberFromColor(Color.White);
}
wsht.Cells[_i, _j].Value = matrix[i, j];
}
}
wbk.SaveAs(path);
wbk.Close();
app.Quit();
app = null;
GC.Collect();
GC.WaitForFullGCComplete();
GC.WaitForPendingFinalizers();
}
So if you can imagine, there are rows that begin with “Day” and “Date” which are delimiting rows, like headings. These rows have bold font and yellow background. With the exception of cells that fall on these delimiting rows, the left-most column has beige background and italic text. The remaining cells are normal text with white background.
When I open the produced xls file, this is not at all what I see. First of all, the entire worksheet is white. Secondly, “Day” (which comes before “Date”) is bold but has the wrong size.
It looks like the most recent colour used is applied to the entire worksheet, and font size changes are only applied for the next cell, not the cell I’m currently in.
Try dropping the .Style eg
instead of
You want to operate on the cell itself, not on its Style, since any other cells on the sheet which share that Style will also be affected.