4

他のブックのセルを参照するセル数式を設定しようとしています。しかし、プログラムで生成されたワークブックを開くと、数式セルが #REF! として表示されます。ログに生成された数式を出力します。それらをカットしてセルに貼り付けると、外部ブックの数値が取り込まれます。

        String formula = "'C:\\tmp\\ForecastAggregate\\Total Products\\[ForecastWorksheet.xls]2010 Budget'!C10"; 
        HSSFCell cell = row.createCell(0); //row was created above
        cell.setCellFormula(formula);

誰でも助けることができますか?

4

3 に答える 3

1

ワークシートから数式を読み取って簡単なテストを行いましたが、次のように一重引用符なしで出力されました。

[test.xls] testsheet!A1

しかし、それを数式として設定しようとすると、エラーが発生しました。

スレッド「main」の例外java.lang.RuntimeException:「test.xls」という名前の外部ワークブックがないリンクは、外部参照を使用する式を読んでいるときに、ワークブックを式エバリュエーターにロードする必要があることを示唆しているようです。環境をセットアップします。しかし、私はこれを試しましたが、それでも機能しませんでした...しかし、それは見るべきものかもしれません:

 // Set up the workbook environment for evaluation
 HSSFFormulaEvaluator ev = new HSSFFormulaEvaluator(testwb); 
 String[] workbookNames = { "test.xls", };
 HSSFFormulaEvaluator[] evaluators = { ev, };
 HSSFFormulaEvaluator.setupEnvironment(workbookNames, evaluators); 

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFFormulaEvaluator.html

于 2010-03-31T16:56:56.437 に答える
1

この問題は、 INDIRECT関数を介して参照の動的評価を使用することで回避できます。

INDIRECT 関数はセルの値を評価します。評価するセルは別のセルの値から取得されます。

例えば、

  1. セル A1 に、セル参照を (式ではなく) プレーン テキストとして入力します。たとえば、「'C:\tmp\ForecastAggregate\Total Products\[ForecastWorksheet.xls]2010 Budget'!C10」です。

  2. A2では、その参照セルの値を表示したいセルに数式を入れます

    =間接(A1)

これにより、A1 からターゲット セルが取得され、その値が A2 に表示されます。

Java では、別のワークシート (「indirectRef」など) を作成して間接を管理するパターンを設定できます。セルへの外部参照を記述するときは常に、代わりに INDIRECT(xx) を記述し、その参照を「indirectRef」ワークシートのセル xx に配置します。Poi は主にインターフェイスであるため、Java スプレッドシート ビルダー コードのコードを変更することなく、これを透過的に実行できる可能性があります。

Excel には数式を動的に評価する EVALUATE マクロもあり、これはさらに簡単に機能しますが、これは公式には文書化されていません (ただし、他の場所で広く文書化されています!)、Office のすべてのバージョンでサポートされているわけではありません。

お役に立てれば!

于 2010-04-27T19:30:57.093 に答える
0

周りを見回してみましたが、この問題について見つけることができた唯一の情報は、これが長年のバグであることを示すこのApacheバグレポートです。

https://issues.apache.org/bugzilla/show_bug.cgi?id=46670

同じワークブック内の他のシートを参照することは問題なく動作するようですが

于 2010-03-26T03:40:49.743 に答える