删除Open Office UNO Java api中的字段

时间:2014-07-08 14:20:21

标签: java uno

我想删除之前插入到.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>

因为,我已经阅读Here删除内容的方法是将其转换为具有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

在最后一行。如果是这样,我该如何删除该字段?

1 个答案:

答案 0 :(得分:1)

我发现它 - 类转换不是访问我需要的接口的方法,查询UNO是。所以我的问题的答案是:

XComponent comp = UnoRuntime.queryInterface(XComponent.class,fieldMaster);
comp.dispose();