我计划使用openoffice语言编写openoffice宏。我很难找到与openoffice文档相关的对象和方法。我搜索并找到了一些示例代码和api页面openoffice.org/api,但找不到API中的对象和方法。例如,阅读这一行代码
oSheet=oDoc.Sheets.getByName("Sheet1")当我引用API页面(openoffice.org/api)时,名称"sheets“( getByName )中没有方法/对象。我应该去哪儿找呢?
发布于 2020-06-13 19:53:36
短答案
通过接口com.sun.star.sheet.XSpreadsheetDocument,可以通过名称、索引或枚举获得工作表。
oSheets = oDoc.getSheets().getByIndex(0)解释
那oDoc.Sheets是什么
要真正理解UNO,最好使用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的一部分。
现在,不像Java那么严格的语言(如Basic和Python )有各种快捷方式来使用UNO。首先,他们不需要queryInterface来获取特定的对象,因为他们不关心类型。
另一个快捷方式是,它们提供的属性可以用作特定接口方法的替代方法。因此,方法XSpreadsheetDocument.getSheets()获得一个快捷属性Sheets。类似地,方法XDocumentSupplier.getDocumentProperties()获得一个快捷属性DocumentProperties。在用Basic或Python编写时,这两个属性都是oDoc的成员。
查找信息
搜索API文档并不容易。在尝试之前,最好先搜索示例代码。安德鲁·皮托尼亚克的宏观文件包含了一组满足许多需求的示例,而在谷歌中的搜索将从诸如ask.libreoffice.org之类的站点中获取示例代码。
此外,内省工具(如XrayTool或MRI )也是必不可少的。这些工具提供了一个对象可用的所有属性和方法的列表,而且由于该列表是平面的,因此不需要深入挖掘另一个接口的继承接口的接口,等等。
https://stackoverflow.com/questions/62359871
复制相似问题