0

Java でいくつかのカスタム Calc スプレッドシート関数を実装する OpenOffice / LibreOffice アドインを作成しました。これらの関数の一部は、関数の結果に論理的に関連付けられる Java オブジェクトを作成し、関数が使用されるセルにも関連付けられます。

(ここでは、関数が関数ウィザードやその他のコンテキストからではなく、セルの数式から呼び出されていると仮定します)。

OpenOffice は、カスタム関数がどのセルから呼び出されているかを通知しないため、その関連付けを把握するのは容易ではありません。関数のパラメータがセル アドレスである場合、それらのセルを見て、それらに依存するセルを見つけることができます。これにより、可能性が絞り込まれます。

文字列の場合、Java オブジェクトの一意のキーを結果に含めることは可能ですが、それは醜いです。次に、すべてのセルを定期的にスキャンして、1 つまたは複数のセルに一意のキーがまだ存在することを確認します。

ただし、関数は数式内の他の関数内にネストすることもできるため、セルの結果の値にキーが表示されるという保証はありません。

オブジェクトへの論理参照がなくなったことを検出するクリーンな方法を探しています (関数のインスタンスが異なる引数で呼び出されたか、関数を含む式が削除または変更されたため)。

編集: XVolatileResult を返すことは有望に見えましたが、数式が削除されたときに removeResultListener() コールバックが呼び出されることはありません (ドキュメントを閉じるときを除く)。

さらに明確化: カスタム関数は、Uno コンポーネントのインスタンス メソッドとして実装されます (1 つのコンポーネントに複数のカスタム関数が存在する場合があります)。コンポーネントのインスタンスは 1 つだけ作成されます。

function メソッドは、スプレッドシートの式の引数に対応する文字列または数値の引数で呼び出されます。引数を値ではなくセル参照として受け取ることもできます。

関数の結果は、文字列、数値、または XVolatileResult です。任意の Java オブジェクトを返すことはできません。

関数を評価する副作用として Java オブジェクトを作成していますが、他のセルの他の式でそれらのオブジェクトを参照できるようにしたいと考えています。

4

0 に答える 0