[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);
適用したいセルに繰り返し実行する。