Apache POI 3.8を使用してExcelファイルを生成していますが、既存の行を何回か複製する必要があります。Apache POI式のセルの複製が非常に遅い
これは、セルインデックスを正規表現に置き換える、新しい行を作成するためのテンプレートとして使用する複雑な数式を使用しているためです。
問題はパフォーマンスがひどいことです。約4000行を生成するには2時間かかります。
私は最初に思ったように、正規表現の部分ではなく、式セルの重複で問題を特定しました。
私は実際に式細胞を複製するためにこれを使用します。
case Cell.CELL_TYPE_FORMULA:
newCell.setCellType(oldCell.getCellType());
newCell.setCellFormula(oldCell.getCellFormula());
break;
を私はこのようなテキストとして数式をコピーする場合:
case Cell.CELL_TYPE_FORMULA:
newCell.setCellType(Cell.CELL_TYPE_STRING);
newCell.setCellValue("="+oldCell.getCellFormula());
break;
それも場所で、私の正規表現ではなく、非常に高速です。
とにかく、これは不完全な解決策です。なぜなら、イタリア語の書式で記述する必要がある場合、式には英語のキーワード(つまりIF())があるからです。
さらに、このように挿入された式を持つセルは「replace all - > = = 'with' = '」のようなものでExcelで強制的に再評価する必要があります。
この問題は、HSSFFormulaParser.parse()が原因でsetCellFormula()に依存しているようです。奇妙な何
、時間を解析すると、指数関数的に成長するようだということです、それはそう
100 rows -> 6785ms
200 rows -> 23933ms
300 rows -> 51388ms
400 rows -> 88586ms
何たびに、私は式、POIライブラリ再評価または再構文解析または再何かをコピーすることですすべての先行行
どのようにこの問題を解決できるか知っていますか? ありがとうございます。
コードのどこでもFormulaEvaluatorを使用していますか?もしそうなら、もしそれがすべきである終わりの外側ではなく、ループの中にあるとしたらどうですか? – Gagravarr
運がよかったです。私のコードの中のFormulaEvaluatorへの参照はありません。 原因は次のようです newCell.setCellFormula() セルに式をコピーする方法はありますか? –