インターフェースクエリ

UNO コンポーネントは一つのコンポーネントで複数のインターフェースをサポートしています。インターフェースのクエリが必要な言語では利用したいインターフェースが必要です。インターフェースのクエリが必要な言語では特に問題になりません。

IDL Reference を見ると大抵のメソッドはインターフェース型の値を返します。これはコンポーネントのベースインターフェースです。

例えば Java ではインターフェースのクエリが必要です。次のコードを見てみます。

import com.sun.star.container.XIndexAccess;
import com.sun.star.sheet.XSpreadsheets;
import com.sun.star.sheet.XSpreadsheetDocument;
import com.sun.star.uno.UnoRuntime;

...
// Calc ドキュメントのシートコンテナを取得する
XSpreadsheetDocument xSheetDoc = UnoRuntime.queryInterface(
    XSpreadsheetDocument.class, doc);
XSpreadsheets xSheets = xSheetDoc.getSheets();

// 0, 1.. といったインデックスでシートを取得するには
XIndexAccess xIndexAcc = UnoRuntime.queryInterface(
    XIndexAccess.class, xSheets);
Object sheet = xIndexAcc.getByIndex(0);

getSheets メソッドの返り値は css.sheet.XSpreadsheets 型です。このインスタンスは Calc ドキュメントにあるシートへのアクセスを提供しておりシートコンテナと呼ばれることもあります。このインターフェースは css.container.XNameContainer インターフェースを継承していますがシートをインデックスで取得したいのであれば css.container.XIndexAccess インターフェースをクエリする必要があります。
さらに css.sheet.XCellRangesAccess インターフェースが必要になったときには xSheets からクエリします。xIndexAcc などからクエリしてはいけません。

あるコンポーネントがどのようなインターフェースをエクスポートしているか確認するには IDL Reference を参照する必要があります。またはオブジェクトの情報を Object Inspector などで確認します。