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はなるべく使うことをオススメします(´・ω・`)
てか使え( ゚д゚ )
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿