Difference between revisions of "ZH/Documentation/BASIC Guide/Cells and Ranges"
(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> | ||
− | {{ | + | {{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 中分别插入了一个数字、一段文本和一个公式。 | ||
− | {{ | + | {{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> 插入单元格区域的副本而不是移动该区域。 | ||
− | {{ | + | {{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
电子表格由包含单元格的二维列表组成。每个单元格都是使用相对于左上角单元格(位置为 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"
StarDesktop.CurrentComponent 返回当前组件。如果您正在使用 BASIC IDE,则在运行该宏时,将会返回 BASIC IDE。由于 BASIC IDE 没有电子表格组件,因此会生成运行时错误。
请保存示例代码,并在电子表格文档中运行该宏。有关详细信息,请参见 StarDesktop。 |
除了数字坐标以外,工作表中的每个单元格都具有名称,例如,电子表格左上角的单元格 (0,0) 称为 A1。字母 A 表示列,数字 1 表示行。切勿将单元格的名称和位置相混淆,因为名称的行计数从 1 开始,而位置计数从 0 开始。
在 Apache OpenOffice 中,表格单元格可以为空,也可以包含文本、数字或公式。单元格类型不是由单元格中保存的内容决定的,而是由其条目使用的对象属性决定的。可以使用 Value、String 和 Formula 属性分别插入并调用数字、文本和公式。
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 中分别插入了一个数字、一段文本和一个公式。
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 插入单元格区域的副本而不是移动该区域。
Content on this page is licensed under the Public Documentation License (PDL). |