質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

9843閲覧

NPOIでセルごとにフォントカラーを変更したい

aoi_astra

総合スコア2

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/12/15 01:04

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

作成したFontを、次の行のGetFont()で潰しています。
そのまま、必要な設定をして、SetFont()してください。

C#

1       var tmp2 = book.CreateFont(); 2       tmp2.FontHeightInPoints = 10; 3       tmp2.FontName = "MS Pゴシック"; 4       tmp2.Color = IndexedColors.White.Index; 5       tmp1.SetFont(tmp2); 6       style = tmp1;

もし、現在のフォント情報が必要なら、GetFont()で取得したFontは、別変数で保持し、必要な情報をtmp2へコピーするようにしてください。

IFontにクローンを行うメソッドがあるなら、そちらを使うのでも構いませんが、検索した限りでは、それらしいメソッドを見つけられませんでした。

投稿2020/12/15 04:43

YT0014

総合スコア1750

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aoi_astra

2020/12/15 04:47

ありがとうございます。 再設定してSetFont()したところ、無事に文字色が変更できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問