OpenOffice Basic 宏与 openoffice API

OpenOffice Basic macro vs openoffice API

我打算使用 openoffice 基本语言编写 openoffice 宏。苦苦寻找openoffice文档相关的对象和方法。我用谷歌搜索并找到了一些示例代码和 API 页面 openoffice.org/api 但我找不到 api 中的对象和方法在哪里。 例如阅读这行代码

oSheet=oDoc.Sheets.getByName("Sheet1")

当我引用 API 页面 (openoffice.org/api) 时,getByName 名称 "sheets" 中没有 method/object。我应该去哪里找?

简答:

可以通过接口com.sun.star.sheet.XSpreadsheetDocument.

按名称、索引或枚举获取Sheet
oSheets = oDoc.getSheets().getByIndex(0)

解释:

oDoc.Sheets是什么?

要真正了解UNO API,最好使用Java。这里有一些您不需要阅读的代码,但我在这里展示它是因为结果会有所帮助。

XSpreadsheetDocument xSpreadSheetDocument = UnoRuntime.queryInterface(
    XSpreadsheetDocument.class, xComponent);
XSpreadsheets xSpreadsheets = xSpreadSheetDocument.getSheets();
XPropertySet propSet = (XPropertySet)UnoRuntime.queryInterface(
    XPropertySet.class, xComponent);

使用这样的代码,我们可以验证 getSheets() 在 Java 中有效,但 Sheets() 无效。 属性 集中也没有任何名为 Sheets 的 属性。总之,Java中没有Sheets,所以Sheets一定不是UNO的一部分API。

现在,不如 Java 严格的语言,例如 Basic 和 Python,可以使用各种快捷方式来使用 UNO。一方面,他们不需要 queryInterface 来获取特定对象,因为他们不关心类型。

另一个捷径是它们提供的属性可以用作特定接口方法的替代方法。因此,方法 XSpreadsheetDocument.getSheets() 得到一个快捷方式 属性 Sheets。同样,方法 XDocumentSupplier.getDocumentProperties() 得到一个快捷方式 属性 DocumentProperties。当用 Basic 或 Python.

编写时,这两个属性都是 oDoc 的成员

查找信息:

搜索 API 文档并不容易。在尝试之前,最好搜索示例代码。 Andrew Pitonyak's macro document contains a set of examples that cover many needs, and searching in Google will bring up example code from sites such as ask.libreoffice.org.

此外,XrayToolMRI 等自省工具也是必不可少的。这些工具给出了一个对象可用的所有属性和方法的列表,并且由于该列表是扁平的,因此无需深入研究另一个接口的继承接口等。