从Excel中设置单元格样式从C#行为不当

下面的代码片段是一个函数,它接受一个矩形的stringmatrix和一个写xls文件的path。 它将matrix的内容放入Excel工作表的单元格中,并根据内容应用一些格式:

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(); } 

所以如果你能想象的话,有一些以“Day”和“Date”开头的行是划定行的,比如标题。 这些行具有粗体字体和黄色背景。 除了位于这些分隔行上的单元格之外,最左边的列具有米色背景和斜体文本。 其余的单元格是白色背景的正常文本。

当我打开生成的xls文件时,这并不是我所看到的。 首先,整个工作表是白色的。 其次,“date”(在“date”之前)是大胆的,但是大小错误。

它看起来像最近使用的颜色应用于整个工作表,并且字体大小更改仅适用于下一个单元格,而不是我当前所在的单元格。

尝试删除.Style例如

 wsht.Cells[_i, _j].Font.Name 

代替

 wsht.Cells[_i, _j].Style.Font.Name 

你想操作单元格本身,而不是样式,因为表单上共享该样式的其他单元格也会受到影响。