おそらくPOIにもいえることだが、セルの書式設定をする際には注意が必要。
同じ書式のセルのCellStyleは同一とみなされる模様
同じ書式が設定されているセルのCellStyleは同じオブジェクトとなる。例えば、同じ色のついているセルのうち、ある一箇所にだけ罫線をつけたいといった場合、下記のようにすると同じ色の付いている全セル(同じスタイルの全セル)に罫線がついてしまう
'※targetCellはHSSFCellオブジェクト
Dim boarderdCellStyle As CellStyle = targetCell.CellStyle
boarderdCellStyle.BorderBottom = CellBorderType.THIN
'→targetCellだけでなく、同じ色のセル全てに罫線が付く
これを回避するには、以下のようにする必要がある
'※hssfはHSSFWorkbookオブジェクト
Dim boarderdCellStyle As CellStyle = hssf.CreateCellStyle
boarderdCellStyle.CloneStyleFrom(targetCell.CellStyle)
boarderdCellStyle.BorderBottom = CellBorderType.THIN
'→新しいCellStyleを作成し、既存のスタイル設定をコピーする。その後に書式を設定
CellStyleの適用はこうしないと既存のスタイルが上書きされるか、他の同一スタイルのセルがダメージを受けることになるので、注意が必要。
※ただ、作りすぎるとExcelを開く際「書式が多すぎます」といったようなエラーになる。いったん作成した書式は使いまわしたほうが吉(Dictionary(Of String,CellStyle)というような感じで格納しておくなど・・・)。
なお、なぜかFontについてはCloneのメソッドが存在しない?ため、手動でCloneに当たる操作(プロパティをコピーしていく)を行う必要がある。
0 件のコメント:
コメントを投稿