WindowsFormでNPOIを使用したExcelファイルを作成する機能を作っています。
現在、同じ内容が2行以上続く場合はセルを結合する処理にしていますが、
これを2行目以降は白文字になるように修正したいです。
しかし、2行目以降のセルのStyleにフォントカラーを白で指定しても、
最初に設定したフォントカラー(黒)が優先されてしまうのか、色が変更されません。
どうにか、セルごとに色変更する方法はないでしょうか?
(以下サンプルです。内部に出てくるcolListは列リストを指します)
C#
1public void CreateReport(IWorkbook book, ISheet sheet, List<List<string>> colList){ 2 //スタイルの設定 3 var styleList = new List<ICellStyle>(); 4 for (var i = 0; i < colList.Count; i++) 5 { 6 var style = book.CreateCellStyle(); 7 8 // 罫線 9 setBorder(i, style); 10 11 // フォント 12 style.WrapText = true; 13 IFont font = book.CreateFont(); 14 font.FontHeightInPoints = 10; 15 font.FontName = "MS Pゴシック"; 16 style.SetFont(font); 17 18 // 文字位置 19 style.Alignment = IsAlignmentLeft(i) ? HorizontalAlignment.Left : HorizontalAlignment.Center; 20 style.VerticalAlignment = VerticalAlignment.Top; 21 22 styleList.Add(style); 23 } 24 25 //列ごとの書式設定 26 for(var i = 0; i < colList.Count; i++){ 27 var colCells = colList[i].TakeWhile((x, y) => y == 0 || (vals[colList[1][y]] == vals[colList[1][y - 1]] && vals[colList[0][y]] == vals[colList[0][y - 1]])); 28 29 do{ 30 /** 中略 31 縦に同じ内容が記載されているセルを特定し、CellRangeAddress型の変数CellRangeにその範囲を格納する 32 **/ 33 for (var ii = cellRange.FirstRow; ii <= cellRange.LastRow; ii++){ 34 var row = cellUtil.GetRow(ii, sheet); 35 var cell = cell.GetCell(row, i + 1); 36 var style = styleList[i]; 37 38 var tmp1 = book.CreateCellStyle(); 39 tmp1.CloneStyleFrom(style); 40 41 if (ii != cellRange.FirstRow && ii != cellRange.LastRow) 42 { 43 var tmp2 = book.CreateFont(); 44 tmp2 = style.GetFont(book); 45 tmp2.Color = IndexedColors.White.Index; 46 tmp1.SetFont(tmp2); 47 style = tmp1; 48 } 49 else 50 { 51 var tmp2 = book.CreateFont(); 52 tmp2 = style.GetFont(book); 53 tmp2.Color = IndexedColors.Black.Index; 54 tmp1.SetFont(tmp2); 55 style = tmp1; 56 } 57 // 設定 58 cell.CellStyle = style; 59 } 60 }(colCells.Any()) 61 } 62}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/15 04:47