Apache POI エクセルのスタイルを4000以内に抑える方法


プロジェクトも忙しい時期だと思いますが、帳票とかエクセル出力時に起きる問題としてスタイルが4000を超えてしまうっていうやつ(´・ω・`)

xlsじゃなくてxlsxにする方法もあるが、処理が重かったりする。゚(゚´ω`゚)゚。
じゃあ、xlsで4000に抑える方法は以下の方法で自分は対応しました。


①セルのコピーを行う場合、createCellStyleを使用しない

よくセルのコピーをする際、以下のような処理を行うと思う。

public CellStyle cloneCellStyle(CellStyle style) {
CellStyle newStyle = workbook.createCellStyle();
newStyle.cloneStyle(style);
return newStyle;
}

この処理自体は問題もなく、間違ってるわけではない。
ただコピーするセルの数が増えれば増えるほど、スタイル数が増え4000になる可能性がある。

じゃあどうするか?こうしてください。

destCell.setCellStyle(srcCell.getCellStyle());

コピー元のセルのスタイルを直接設定してください(´・ω・`)
こうすることでコピーするセルが増えようとスタイル数は変わらないです。

しかし、既に気づいてる方もいると思うが
上のようにコピーするとコピー先にセルに書式を設定するとコピー元も同じような書式になります。

使えねーじゃねーか、クソだろと思う方はいると思いますが、②と組み合わせることで問題が解決されます。

②スタイルの設定はCellUtil.setCellStylePropertyを使用する。
セルのスタイルの設定でほとんどの方は
cell.getStyle().setFillPattern("色");

みたいな書き方をしてると思います。
またコピーしてスタイルの反映を避ける為、createCellStyleとかも設定しちゃってる人、いると思います(´・ω・`)
なのでCellUtil.setCellStylePropertyを使ってスタイルを設定してください。
※CellUtilを使用する場合、最新のPOIのjarファイルを使用することをオススメします。

CellUtil.setCellStyleProperty(cell,workbook,CellUtil.FILL_PATTERN,"色");

CellUtilはなるべく使うことをオススメします(´・ω・`)
てか使え( ゚д゚ )




0 件のコメント:

コメントを投稿