1

Apache POI を使用してロードし、大量のデータを書き込み、別のファイルとして保存するテンプレート XLS ファイルがあります。XLS ファイルに次のような式があります。

=SUMPRODUCT((DS!B:B="IN_THIS_ONLY")*(DS!D:D="New trade"))

も試した

=SUMPRODUCT(0+(DS!B:B="IN_THIS_ONLY"),0+(DS!D:D="New trade"))

Excel のセルで Enter キーを押すと、これらは正しく評価されます。ただし、単純に呼び出す

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);

それらを評価しているようには見えず、Excel の [今すぐ計算] ボタンを押しても評価されないため、これは特別な数式または関数であると思います。

他のより従来型COUNTIFの およびSUMIFは問題なく動作しますが、これらでは複数の条件を指定することはできません。

POI は配列数式をサポートしていません。

これらを機能させる方法はありますか。POI バージョン 3.7 を使用しています。

4

2 に答える 2

4

Ctrlキーを押しながらAltキーを押しながらF9キーを押すと、Excelですべての数式を手動で強制的に再評価できます。

そして、これがブックを開いたときに自動的に機能するようにするための秘訣です。

数式に次を追加します。

+(NOW()*0)

たとえば、私のSUMPRODUCT上記は

=SUMPRODUCT((DS!B:B="IN_THIS_ONLY")*(DS!D:D="New trade"))+(NOW()*0)

そしてこれはうまくいきます!Excelは、開いたときに特別な数式セルを再計算するようになりました。

これNOW()は、揮発性の関数であるためです。これについて私が学んだ場所は次のとおりです:http://msdn.microsoft.com/en-us/library/bb687891.aspx

Application.CalculateFullこれも機能しますが、Excel 2007以降でのみ機能します(もちろん、マクロの実行を有効にする必要があります)。残念ながら、私の場合、Excel 2007を使用していても、ブックはExcel 2003ユーザーによっても開かれるため、これはオプションではありませんでした。

于 2011-05-02T11:48:36.687 に答える
2

SumProduct は配列ベースの数式関数ですか?

もしそうなら、それは問題を説明するでしょう。1 つのオプションは、不足しているサポートを追加するために POI にパッチを提供することです。何が必要かについて開発者リストとバグジラでいくつかの議論がありました。もしあなたが開発者リストに投稿するなら、私たちはあなたが始めるのを喜んで手伝います.

それ以外の場合は、式の再計算フラグを設定して、読み込み時に Excel に値を再計算させることができます。

于 2011-05-01T07:50:43.537 に答える