POIでセルの大量コピー時「書式が多すぎる」エラーの解決方法

2010/12/10 10:09Update
TAGS: POI | Java | Excel | 帳票 | 書式

POIを使ってExcelに出力する際に、「セルの書式が多すぎるため、書式を追加できません」のようなメッセージを出てしまい後ろの書式が設定されないことはしばしばあります。

原因


「セルの書式が多すぎるため、書式を追加できません」というメッセージは、
ブックに含まれるセルの書式の組み合わせが約 4,000 を超える場合に発生します。

詳細はこちらから確認できます。


解決方法としては、ひと言で「書式設定の組み合わせ数を減少させる」です。

NGコード例


HSSFWorkbook hssfWorkbook = ...
//適応元セル
HSSFCell srcCell = ...
//適応先セル
HSSFCell destCell = ...

//適応元のセルの書式を取得
HSSFCellStyle srcHSSFCellStyle = srcCell.getCellStyle();

//元のセルのスタイルを参照して新しいセルの書式を設定(ここが問題)
HSSFCellStyle destHSSFCellStyle = hssfWorkbook.createCellStyle();    //新しいセルの書式作成
destHSSFCellStyle.setAlignment(srcHSSFCellStyle.getAlignment());
destHSSFCellStyle.setBorderBottom(srcHSSFCellStyle
    .getBorderBottom());
destHSSFCellStyle.setBorderLeft(srcHSSFCellStyle
    .getBorderLeft());
...    //その他書式設定

destCell.setCellStyle(destHSSFCellStyle);    //書式設定


以上は実際に「セルの書式が多すぎるため、書式を追加できません」のメッセージを出させたコード例(抜粋)です。


OKコード例


上のNGコードを次のように改造したら、メッセージが出なくなりました。
//適応元セル
HSSFCell srcCell = ...
//適応先セル
HSSFCell destCell = ...

//適応先セルの書式に適応元セルの書式をそのまま適応(設定)します。
destCell.setCellStyle(srcCell.getCellStyle());


比較してみれば明白ですね、「書式を適応したいセルに新しい書式を新規作成せずに、適応元セルの書式をそのままにすればよい、即ち、できるだけ既存の書式を利用する」ということですね。

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation