[POI]

表の一部の罫線を動的に変更したくて、HSSFCell#getCellStyle() でスタイルを取得し、HSSFCellStyle#setBorderBottom() で罫線を変更した。
ところが、一部しか変更してないつもりなのに、表全体に同じスタイルが変更されてしまう。

現象の理由
POIでは、同じスタイルを持つセルは、そのスタイルをシートの中で共有するらしい。
なので、1箇所変えたつもりが、同じスタイルのセル(今回は表全体)のスタイルが変わってしまったらしい。


解決策
新しくスタイルを作成して、変更したいセルのスタイルを新しく作ったスタイルにコピー。

//変更したいセルのスタイルを取得
HSSFCellStyle oldStyle = cell.getCellStyle();

//新しくスタイルを作成
HSSFCellStyle newStyle = workwook.createCellStyle();

//変更元スタイルを新しく作ったスタイルにコピー
newStyle.cloneStyleFrom(oldStyle);

//新しいスタイルのスタイルを変更する
newStyle.setBorderBottom(HSSFCellStyle.BORDER_NONE); //底の罫線を消す

//新しいスタイルの適用
cell.setCellStyle(newStyle);

適用したいセルに繰り返し実行する。