OpenOffice Basic 宏与 openoffice API

Posted

技术标签:

【中文标题】OpenOffice Basic 宏与 openoffice API【英文标题】:OpenOffice Basic macro vs openoffice API 【发布时间】:2020-06-13 12:39:02 【问题描述】:

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

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

当我提到 API 页面 (openoffice.org/api) 时,名称“表格”中没有方法/对象,getByName。我应该在哪里寻找?

【问题讨论】:

【参考方案1】:

简答

通过接口com.sun.star.sheet.XSpreadsheetDocument可以通过名称、索引或枚举获取表格。

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 包含一组涵盖多种需求的示例,在 Google 中搜索会显示来自 ask.libreoffice.org 等网站的示例代码。

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

【讨论】:

谢谢。尤其是引入自省工具。我现在用 X 射线。我可以轻松浏览 API。谢谢。

以上是关于OpenOffice Basic 宏与 openoffice API的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenOffice.org BASIC 中引用相邻单元格

将电子表格 (OpenOffice) 导入 Visual Basic .net 组合框

OpenOffice basic:声明一个数组常量

在 OpenOffice Basic 中继续循环

如何在 OpenOffice Calc (BASIC) 中获取范围的第一行的编号

OpenOffice BASIC 如何在工作表中插入复选框