如何通过 UNO 更改文档名称?

Posted

技术标签:

【中文标题】如何通过 UNO 更改文档名称?【英文标题】:How to change the document name via UNO? 【发布时间】:2018-05-20 12:41:20 【问题描述】:

我使用 Java 中的 UNO 来控制 LibreOffice (5.3)。 如何更改窗口标题栏中显示的文档名称?

到目前为止,我尝试使用XDocumentProperties,但它只在文档的嵌入属性中设置标题,而不是在窗口标题中:

// Sets only meta data, not the window title.
XDocumentPropertiesSupplier xDocumentPropertiesSupplier = UnoRuntime.queryInterface(XDocumentPropertiesSupplier.class, openedDocument);
XDocumentProperties xDocumentProperties = xDocumentPropertiesSupplier.getDocumentProperties();
xDocumentProperties.setTitle(retrievedFile.name);

【问题讨论】:

欢迎来到 ***!一些示例代码和有关您计划如何使用它的声明会有所帮助。例如,代码流文档是否与我答案中的链接中的一样?此外,请说明您迄今为止尝试过的内容以及您研究过的任何文档的链接。 谁对此投了反对票:请添加评论说明如何改进问题。 @JimK 谢谢!正如你所解释的那样,我试图改进我的问题。 【参考方案1】:

通常,只需从XStorable 调用storeAsURL

但是,对于流式传输等特殊情况,您可能需要使用XDocumentProperties。从https://forum.openoffice.org/en/forum/viewtopic.php?f=25&t=70156 调用setTitle(),如以下C++ 代码所示。

Reference<XModel> xModel(xComponent, UNO_QUERY);
Reference<XTitle> xTitle(xModel, UNO_QUERY);
xTitle->setTitle(constOUString("Title"));

编辑

这是您拒绝的编辑中的XTitle 代码。

XTitle xTitle = UnoRuntime.queryInterface(XTitle.class, xComponent /* e.g. from xComponentLoader.loadComponentFromURL(...) */);
xTitle.setTitle("Title");

注意:正如审稿人所写,这应该已添加到 cmets 或单独的答案中,而不是编辑。在这个网站上编辑别人的代码几乎从来都不是一个好主意。但是,回答您自己的问题是完全可以接受的。

【讨论】:

不幸的是,这是其中一种特殊情况。不过,除此之外:XDocument 属性只设置元数据标题。它不影响标题栏中显示的标题。 使用XTitle 有效,但来自论坛的代码略有错误。你不需要通过XModel @Adeveloper:好的,我编辑了答案以合并您的代码。

以上是关于如何通过 UNO 更改文档名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Uno CheckBox 控件的名称和标签?

Libreoffice API (UNO):需要更改用户的 xTextField 文本

如何在 OSX 上的应用程序运行时获取更改名称的文件?

Excel 2007/2010 的 LibreOffice UNO XStorage 类型名称

如何通过命令行更改 Gerrit 的主题名称

如何通过使用代码更改变量名称来动态使用变量