1

最近、JXLS の新しいバージョン (1.0.2 から) にアップグレードしたところ、パフォーマンスが大幅に低下することがわかりました。私のユースケースは、テンプレートに基づいて Excel レポートを作成することです。以前は、レポートはわずか 4 分で書き出されていましたが、今では書き出すのに 60 分以上かかります。私は使用しています

JxlsHelper.getInstance().processTemplate(is, os, context);

テンプレートを処理するための呼び出し (こちらのチュートリアルに従ってください)。両方のトランスフォーマー (poi と jexcel) を使用してみましたが、どちらも以前のバージョンの JXLS ほどのパフォーマンスは得られませんでした。

他の誰かが同様の経験をしたか、アップグレード後に同様のパフォーマンスの問題を解決したかどうか疑問に思っています.

4

2 に答える 2

1

一般に、jxls-2 は jxls-1 よりもパフォーマンスが優れているはずです。正しくない特定のテンプレートがある可能性があります。共有するか、例を作成していただければ、問題の根本原因を調査できます。問題はbitbucket issue trackerで作成できます。

それに加えて、多くのデータ行を出力するjxls-demoプロジェクトの次の例を確認してください

何百万ものレコードを生成する必要がある場合は、SXSSF トランスフォーマーが最速ですが、単純なテンプレートでしか機能しません。

また、テンプレートに多くの式がある場合は、式の処理を無効にして、それが役立つかどうかを確認してください。JxlsHelpersetProcessFormulas(false)のメソッドで実行できます。

何も解決しない場合は、Issue Tracker に問題を報告してください。

于 2015-08-14T08:06:40.630 に答える
0

小さなスプレッドシート (30,000 行) には最適です。

すべてのシートで 100 万行を超えるスプレッドシートで v2.2.5 に苦労しています。私が使用しているのは setProcessFormulas(false) で、60 秒未満と予想されます。永遠に回転しているようで、完成したものを見たことがありません。

私は InputStream を使用していますが、単一のスレッドでのみ動作しているかのように、CPU の使用量はほとんどありません。私は、はるかに大きなスプレッドシートを問題なく処理した他のxls書き込み戦略を使用したため、内部的なものに見えます。

protected void workbookToStream(Map beanParams, OutputStream os) throws IOException {
      try(InputStream is = new ByteArrayInputStream(templateBytes)) {
         JxlsHelper helper = JxlsHelper.getInstance();
         helper.setProcessFormulas(false);
         helper.processTemplate(is, os, new Context(beanParams));
      }
}
于 2015-09-08T14:40:26.840 に答える