单元格和区域

From Apache OpenOffice Wiki
< ZH/Documentation/BASIC Guide
Revision as of 02:19, 13 November 2008 by G11nAutomation (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
doc OOo
Book.png


电子表格由包含单元格的二维列表组成。每个单元格都是使用相对于左上角单元格(位置为 0,0)的 X 位置和 Y 位置定义的。

以下示例创建了一个引用左上角单元格的对象,并在单元格中插入了文本:

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.String = "Test"

Template:Documentation/Note

除了数字坐标以外,工作表中的每个单元格都具有名称,例如,电子表格左上角的单元格 (0,0) 称为 A1。字母 A 表示列,数字 1 表示行。切勿将单元格的名称位置相混淆,因为名称的行计数从 1 开始,而位置计数从 0 开始。

在 Apache OpenOffice 中,表格单元格可以为空,也可以包含文本、数字或公式。单元格类型不是由单元格中保存的内容决定的,而是由其条目使用的对象属性决定的。可以使用 ValueStringFormula 属性分别插入并调用数字、文本和公式。

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object   
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100
 
Cell = Sheet.getCellByPosition(0, 1)
Cell.String = "Test"
 
Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1"

本示例在字段 A1 至 A3 中分别插入了一个数字、一段文本和一个公式。

Template:Documentation/Note

Apache OpenOffice 将使用 String 属性输入的单元格内容视为文本,即使该内容为数字也是如此。数字在单元格中左对齐,而不是右对齐。在使用公式时,也要注意文本和数字的区别:

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
Cell = Sheet.getCellByPosition(0, 0)
Cell.Value = 100
 
Cell = Sheet.getCellByPosition(0, 1)
Cell.String = 1000
 
Cell = Sheet.getCellByPosition(0, 2)
Cell.Formula = "=A1+A2"
 
MsgBox Cell.Value

虽然单元格 A1 包含值 100,单元格 A2 包含值 1000,但公式 A1+A2 返回值 100。这是因为单元格 A2 的内容是作为字符串而不是数字输入的。

要检查单元格内容是数字还是字符串,请使用 Type 属性:

Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(1,1)
 
Cell.Value = 1000
 
Select Case Cell.Type 
Case com.sun.star.table.CellContentType.EMPTY 
   MsgBox "Content: Empty"
Case com.sun.star.table.CellContentType.VALUE
   MsgBox "Content: Value"
Case com.sun.star.table.CellContentType.TEXT
   MsgBox "Content: Text"
Case com.sun.star.table.CellContentType.FORMULA
   MsgBox "Content: Formula"
End Select

Cell.Type 属性返回 com.sun.star.table.CellContentType 枚举值,该值标识了单元格的内容类型。可能的值包括:

EMPTY
无值
VALUE
数字
TEXT
字符串
FORMULA
公式

插入、删除、复制和移动单元格

除了直接修改单元格内容以外,Apache OpenOffice Calc 还提供了一个接口,用于插入、删除、复制或合并单元格。可通过电子表格对象使用此接口 (com.sun.star.sheet.XRangeMovement),它提供了四种修改单元格内容的方法。

insertCell 方法用于在工作表中插入单元格。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
 
Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellInsertMode.DOWN)

本示例在电子表格的第一个工作表(编号为 0)中的第二列、第二行交叉处(行号和列号均为 1)插入了一个大小为两行乘两列的单元格区域。指定单元格区域内的任何现有值都将移到该区域之下。

要定义想要插入的单元格区域,请使用 com.sun.star.table.CellRangeAddress 结构。该结构中包含以下值:

Sheet (short)
工作表编号(编号从 0 开始)。
StartColumn (long)
单元格区域中的第一列(编号从 0 开始)。
StartRow (long)
单元格区域中的第一行(编号从 0 开始)。
EndColumn (long)
单元格区域中的最后一列(编号从 0 开始)。
EndRow (long)
单元格区域中的最后一行(编号从 0 开始)。

必须将完整的 CellRangeAddress 结构作为第一个参数传递到 insertCells 方法。insertCells 的第二个参数包含 com.sun.star.sheet.CellInsertMode 枚举值,它定义了如何处理位于插入位置之前的值。CellInsertMode 枚举可以识别以下值:

NONE
当前值保留在目前位置。
DOWN
插入位置及其下面的单元格向下移动。
RIGHT
插入位置及其右侧的单元格向右移动。
ROWS
插入位置之后的行向下移动。
COLUMNS
插入位置之后的列向右移动。

removeRange 方法与 insertCells 方法相对应。该方法可以从工作表中删除 CellRangeAddress 结构中定义的区域。

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
 
Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.UP)

本示例从工作表中删除了 B2:C3 单元格区域,然后将下面的单元格向上移动两行。删除类型是由以下某个 com.sun.star.sheet.CellDeleteMode 枚举值定义的:

NONE
当前值保留在当前位置。
UP
插入位置及其下面的单元格向上移动。
LEFT
插入位置及其右侧的单元格向左移动。
ROWS
插入位置之后的行向上移动。
COLUMNS
插入位置之后的列向左移动。

XRangeMovement 接口提供了另外两种方法,分别用于移动 (moveRange) 或复制 (copyRange) 单元格区域。以下示例移动了 B2:C3 区域,以使该区域从位置 A6 开始:

Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
 
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
 
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
 
CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5
 
Sheet.moveRange(CellAddress, CellRangeAddress)

除了 CellRangeAdress 结构以外,moveRange 方法还需要使用 com.sun.star.table.CellAddress 结构来定义移动目标区域的起始位置。CellAddress 方法提供了以下值:

Sheet (short)
电子表格编号(编号从 0 开始)。
Column (long)
目标列的编号(编号从 0 开始)。
Row (long)
目标行的编号(编号从 0 开始)。

将始终使用 moveRange 方法覆盖目标区域中的单元格内容。与 InsertCells 方法不同,removeRange 方法未提供执行自动移动的参数。

copyRange 方法与 moveRange 方法的工作方式相同,所不同的是 copyRange 插入单元格区域的副本而不是移动该区域。

Template:Documentation/Note

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