1

以前に .odt ドキュメントに挿入したテキスト フィールドを削除したいと考えていました。content.xml では、次のようになります。

<text:user-field-decls>
    <text:user-field-decl text:name="id" office:string-value="${baza.id}" office:value-type="string"/>
    ...
</text:user-field-decls>

ここで読んだように、何かを削除する方法は、dispose() メソッドを持つインターフェイスにキャストすることです。次のコードを試しました。

XTextFieldsSupplier xTextFieldsSupplier = (XTextFieldsSupplier) UnoRuntime.queryInterface(
            XTextFieldsSupplier.class, xDoc);
XNameAccess xNamedFieldMasters = xTextFieldsSupplier.getTextFieldMasters();
Object fieldMaster = xNamedFieldMasters.getByName("com.sun.star.text.fieldmaster.User."+name);
((XComponent)fieldMaster).dispose()

name は、削除したいフィールドの名前です。このフィールドは、宣言以外のドキュメントのどこにも使用されていないと思います。ただし、ClassCast 例外がスローされます。

java.lang.ClassCastException: com.sun.star.uno.Any cannot be cast to com.sun.star.lang.XComponent

最後の行に。その場合、どうすればフィールドを削除できますか?

4

1 に答える 1

1

そして、私はそれを見つけました-クラスキャストは私が必要とするインターフェースにアクセスする方法ではなく、UNOのクエリはそうです。したがって、私の質問に対する答えは次のとおりです。

XComponent comp = UnoRuntime.queryInterface(XComponent.class,fieldMaster);
comp.dispose();
于 2014-07-09T06:55:48.663 に答える