几个主要接口的概述

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo
Book.png

在 Apache OpenOffice API 的很多部分中,都可以找到一些 Apache OpenOffice 接口。它们为抽象任务定义了一系列方法,可应用这些方法来解决各种问题。此处简要介绍了最常用的接口。

有关对象的起源将在本指南的后面章节中进行说明。在此,仅介绍这些对象的一些抽象特性,Apache OpenOffice API 为这些对象提供了一些主要接口。

创建上下文相关对象

Apache OpenOffice API 提供了两种创建对象的方法。其中一种方法是本章开头提到的 createUnoService 函数。createUnoService 可以创建通用对象。这些对象和服务也称为上下文无关服务。

除了上下文无关服务以外,还存在上下文相关服务,这些服务的对象只能与其他对象一起使用。例如,电子表格文档的绘图对象只能在这一种文档中存在。

com.sun.star.lang.XMultiServiceFactory 接口

通常,上下文相关对象是通过该对象所依赖的对象方法创建的。XMultiServiceFactory 接口中定义的 createInstance 方法专门用于文档对象。

例如,可以使用电子表格对象按如下方式创建绘图对象:

Dim RectangleShape As Object
RectangleShape = _
  Spreadsheet.createInstance("com.sun.star.drawing.RectangleShape")

文本文档中的段落模板是以相同方式创建的:

Dim Style as Object
Style = Textdocument.createInstance("com.sun.star.style.ParagraphStyle")

对下级对象的命名访问

XNameAccessXNameContainer 接口用于包含下级对象的对象,可以使用自然语言名称对这些下级对象进行寻址。

XNamedAccess 允许访问各个对象;而 XNameContainer 用于插入、修改和删除元素。

com.sun.star.container.XNameAccess 接口

电子表格的工作表对象提供了一个使用 XNameAccess 的示例。该示例合并了电子表格中的所有页面。可以使用 XNameAccess 中的 getByName 方法访问各个页面:

Dim Sheets As Object
Dim Sheet As Object
 
Sheets = Spreadsheet.Sheets
Sheet = Sheets.getByName("Sheet1")

getElementNames 方法简要说明了所有元素的名称。因此,它返回一个包含这些名称的数据字段。以下示例说明了如何通过循环确定并显示电子表格的所有元素名称:

Dim Sheets As Object
Dim SheetNames
Dim I As Integer
 
Sheets = Spreadsheet.Sheets
SheetNames = Sheets.getElementNames
 
For I=LBound(SheetNames) To UBound(SheetNames)
  MsgBox SheetNames(I)
Next I

XNameAccess 接口的 hasByName 方法揭示了基本对象中是否存在具有特定名称的下级对象。因此,以下示例将显示一条消息,通知用户 Spreadsheet 对象是否包含名为 Sheet1 的页面。

Dim Sheets As Object
 
Sheets = Spreadsheet.Sheets
If Sheets.HasByName("Sheet1") Then
  MsgBox " Sheet1 available"
Else
  MsgBox "Sheet1 not available"
End If

com.sun.star.container.XNameContainer 接口

XNameContainer 接口用于插入、删除和修改基本对象中的下级元素。负责完成这些操作的函数为 insertByNameremoveByNamereplaceByName

下面是此接口的一个实用示例。该示例调用一个文本文档,该文档包含一个 StyleFamilies 对象,并使用该对象提供文档的段落模板 (ParagraphStyles)。

Dim StyleFamilies As Object
Dim ParagraphStyles As Object
Dim NewStyle As Object   
 
StyleFamilies = Textdoc.StyleFamilies
ParagraphStyles = StyleFamilies.getByName("ParagraphStyles")
ParagraphStyles.insertByName("NewStyle", NewStyle)      
ParagraphStyles.replaceByName("ChangingStyle", NewStyle)   
ParagraphStyles.removeByName("OldStyle")

insertByName 行在 ParagraphStyles 对象中的相同名称下插入 NewStyle 样式。replaceByName 行将 ChangingStyle 后面的对象更改为 NewStyle。最后,removeByName 调用将 OldStyle 后面的对象从 ParagraphStyles 中删除。

对下级对象的基于索引的访问

XIndexAccessXIndexContainer 接口用于包含下级对象并可使用索引对其进行寻址的对象。

XIndexAccess 提供了用于访问单个对象的方法。XIndexContainer 提供了用于插入和删除元素的方法。

com.sun.star.container.XIndexAccess 接口

XIndexAccess 提供了用于调用下级对象的 getByIndexgetCount 方法。getByIndex 为对象提供了特定索引。getCount 返回可用对象的数目。

Dim Sheets As Object
Dim Sheet As Object
Dim I As Integer
 
Sheets = Spreadsheet.Sheets
 
For I = 0 to Sheets.getCount() - 1
  Sheet = Sheets.getByIndex(I)
  ' Editing sheet
Next I

该示例说明了一个循环,此循环遍历所有工作表元素,并将对每个元素的引用保存在 Sheet 对象变量中。在使用索引时,请注意 getCount 返回元素的数目。不过,getByIndex 中的元素是从 0 开始进行编号的。因此,循环的计数变量是从 0 到 getCount()-1

com.sun.star.container.XIndexContainer 接口

XIndexContainer 接口提供了 insertByIndexremoveByIndex 函数。这些参数的结构与 XNameContainer 中相应函数的结构相同。

对下级对象的交互访问

在某些情况下,对象可能包含一个下级对象列表,但无法通过名称或索引对这些下级对象进行寻址。此时,应使用 XEnumerationXenumerationAccess 接口。它们提供了一种机制来逐步遍历某个对象的所有下级元素,而无需进行直接寻址。

com.sun.star.container.XEnumerationXenumerationAccess 接口

基本对象必须提供 XEnumerationAccess 接口,该接口仅包含 createEnumeration 方法。此方法返回一个辅助对象,而该对象又提供了包含 hasMoreElementsnextElement 方法的 XEnumeration 接口。可通过这些方法来访问下级对象。

以下示例将遍历文本的所有段落:

Dim ParagraphEnumeration As Object
Dim Paragraph As Object
 
ParagraphEnumeration = Textdoc.Text.createEnumeration
 
While ParagraphEnumeration.hasMoreElements()
  Paragraph = ParagraphEnumeration.nextElement()
Wend

该示例首先创建了一个 ParagraphEnumeration 辅助对象。然后,借助此对象通过循环逐步返回文本的各个段落。在 hasMoreElements 方法返回 False 值(表示已到达文本末尾)时,将会立即终止循环。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools