2011年5月20日金曜日

ASP.NET NPOI セルの書式設定を行う上での注意点

NPOIというライブラリを使用すると、サーバーサイドでのExcelファイルの作成が簡単に出来る(NPOIについてはこちらを参照 NPOI使用方法 。Javaで作られたPOIの.NET版)。

おそらく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 件のコメント:

コメントを投稿