Difference between revisions of "ZH/Documentation/BASIC Guide/Cells and Ranges"

From Apache OpenOffice Wiki
Jump to: navigation, search
(New page: {{ZH/Documentation/BASICGuideTOC/v2 |ShowPrevNext=block |ShowPrevPage=block |PrevPage=Documentation/BASIC Guide/Spreadsheets |NextPage=Documentation/BASIC Guide/Formatting Spreadsheet Docu...)
 
 
(2 intermediate revisions by one other user not shown)
Line 2: Line 2:
 
|ShowPrevNext=block
 
|ShowPrevNext=block
 
|ShowPrevPage=block
 
|ShowPrevPage=block
|PrevPage=Documentation/BASIC Guide/Spreadsheets
+
|PrevPage=ZH/Documentation/BASIC Guide/Spreadsheets
|NextPage=Documentation/BASIC Guide/Formatting Spreadsheet Documents
+
|NextPage=ZH/Documentation/BASIC Guide/Formatting Spreadsheet Documents
 
|spread=block
 
|spread=block
 
}}
 
}}
Line 24: Line 24:
 
</source>
 
</source>
  
{{Documentation/Note|<tt>StarDesktop.CurrentComponent</tt> 返回'''当前组件'''。如果您正在使用 BASIC IDE,则在运行该宏时,将会返回 BASIC IDE。由于 BASIC IDE 没有电子表格组件,因此会生成运行时错误。
+
{{Note|<tt>StarDesktop.CurrentComponent</tt> 返回'''当前组件'''。如果您正在使用 BASIC IDE,则在运行该宏时,将会返回 BASIC IDE。由于 BASIC IDE 没有电子表格组件,因此会生成运行时错误。
  
请保存示例代码,并在电子表格文档中运行该宏。有关详细信息,请参见 [[Documentation/BASIC_Guide/StarDesktop|StarDesktop]]。}}
+
请保存示例代码,并在电子表格文档中运行该宏。有关详细信息,请参见 [[ZH/Documentation/BASIC_Guide/StarDesktop|StarDesktop]]。}}
  
 
除了数字坐标以外,工作表中的每个单元格都具有名称,例如,电子表格左上角的单元格 (0,0) 称为 <tt>A1</tt>。字母 <tt>A</tt> 表示列,数字 1 表示行。切勿将单元格的'''名称'''和'''位置'''相混淆,因为名称的行计数从 1 开始,而位置计数从 0 开始。
 
除了数字坐标以外,工作表中的每个单元格都具有名称,例如,电子表格左上角的单元格 (0,0) 称为 <tt>A1</tt>。字母 <tt>A</tt> 表示列,数字 1 表示行。切勿将单元格的'''名称'''和'''位置'''相混淆,因为名称的行计数从 1 开始,而位置计数从 0 开始。
Line 52: Line 52:
 
本示例在字段 A1 至 A3 中分别插入了一个数字、一段文本和一个公式。
 
本示例在字段 A1 至 A3 中分别插入了一个数字、一段文本和一个公式。
  
{{Documentation/Note|<tt>Value</tt>、<tt>String</tt> 和 <tt>Formula</tt> 属性取代了用于设置表格单元格值的 <tt>PutCell</tt> 方法。}}
+
{{Note|<tt>Value</tt>、<tt>String</tt> 和 <tt>Formula</tt> 属性取代了用于设置表格单元格值的 <tt>PutCell</tt> 方法。}}
  
 
{{OOo}} 将使用 <tt>String</tt> 属性输入的单元格内容视为文本,即使该内容为数字也是如此。数字在单元格中左对齐,而不是右对齐。在使用公式时,也要注意文本和数字的区别:
 
{{OOo}} 将使用 <tt>String</tt> 属性输入的单元格内容视为文本,即使该内容为数字也是如此。数字在单元格中左对齐,而不是右对齐。在使用公式时,也要注意文本和数字的区别:
Line 212: Line 212:
 
<tt>copyRange</tt> 方法与 <tt>moveRange</tt> 方法的工作方式相同,所不同的是 <tt>copyRange</tt> 插入单元格区域的副本而不是移动该区域。
 
<tt>copyRange</tt> 方法与 <tt>moveRange</tt> 方法的工作方式相同,所不同的是 <tt>copyRange</tt> 插入单元格区域的副本而不是移动该区域。
  
{{Documentation/Note|就功能而言,{{OOo}} Basic 中的 <tt>insertCell</tt>、<tt>removeRange</tt> 和 <tt>copyRange</tt> 方法与 VBA 中的 <tt>Range.Insert</tt>、<tt>Range.Delete</tt> 和 <tt>Range.Copy</tt> 方法相同。但在 VBA 中,这些方法应用于相应的 <tt>Range</tt> 对象;而在 {{OOo}} Basic 中,这些方法应用于关联的 <tt>Sheet</tt> 对象。}}
+
{{Note|就功能而言,{{OOo}} Basic 中的 <tt>insertCell</tt>、<tt>removeRange</tt> 和 <tt>copyRange</tt> 方法与 VBA 中的 <tt>Range.Insert</tt>、<tt>Range.Delete</tt> 和 <tt>Range.Copy</tt> 方法相同。但在 VBA 中,这些方法应用于相应的 <tt>Range</tt> 对象;而在 {{OOo}} Basic 中,这些方法应用于关联的 <tt>Sheet</tt> 对象。}}
  
 
{{PDL1}}
 
{{PDL1}}
 +
 +
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Cells and Ranges}}
 
{{InterWiki_Languages_BasicGuide|articletitle=Documentation/BASIC Guide/Cells and Ranges}}

Latest revision as of 13:59, 6 July 2018

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"
Documentation note.png StarDesktop.CurrentComponent 返回当前组件。如果您正在使用 BASIC IDE,则在运行该宏时,将会返回 BASIC IDE。由于 BASIC IDE 没有电子表格组件,因此会生成运行时错误。

请保存示例代码,并在电子表格文档中运行该宏。有关详细信息,请参见 StarDesktop

除了数字坐标以外,工作表中的每个单元格都具有名称,例如,电子表格左上角的单元格 (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 中分别插入了一个数字、一段文本和一个公式。

Documentation note.png ValueStringFormula 属性取代了用于设置表格单元格值的 PutCell 方法。

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 插入单元格区域的副本而不是移动该区域。

Documentation note.png 就功能而言,Apache OpenOffice Basic 中的 insertCellremoveRangecopyRange 方法与 VBA 中的 Range.InsertRange.DeleteRange.Copy 方法相同。但在 VBA 中,这些方法应用于相应的 Range 对象;而在 Apache OpenOffice Basic 中,这些方法应用于关联的 Sheet 对象。
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools