单元格引用是一组坐标,用于指定单元格或单元格区域在工作表上的位置。在公式中使用单元格引用来获取和处理相应单元格中包含的数据。每次更改这些单元格的值时,都会自动更新使用单元格引用的公式的结果。
SpreadSheet API 支持以下单元格引用类型。
单元格由列字母和行号引用。
启用此单元格引用样式后,将在工作表上对行和列进行编号。单元格由前面的行号“R”和列号前面的“C”表示。
对位于其他工作表中的单元格的引用。
对位于工作簿内多个工作表上的相同单元格的引用。
对表和表数据范围的引用。
有关如何在公式中使用单元格引用或访问单元格的详细信息,请参阅以下文章:
阅读教程:如何:在公式中使用单元格和工作表引用
阅读教程:如何:访问单元格范围
A1单元格引用是单元格所属的列标题和行标题的组合 - 列字母后跟行号。默认情况下,列标题和行标题显示在工作表的顶部和左侧(请参见如何:显示和隐藏行标题和列标题)。
下表提供了对单个单元格的 A1 引用和各种单元格区域(包括对整行和整列的引用)的示例。
在公式中使用时,单元格引用可以是相对的、绝对的或混合的,具体取决于复制公式时是否应自动调整它。
公式中的相对单元格引用基于引用单元格和包含公式的单元格的相对位置。为了保持此相对位置不变,每次将公式复制到另一个单元格时,都会自动更改单元格引用。例如,如果将具有单元格 B2 相对引用的公式从单元格 C3 复制到 D6,则引用将自动从 B2 更改为 C5。
公式中的绝对单元格引用始终引用特定单元格,如果将公式复制或移动到另一个单元格,则不会更改。在绝对单元格引用中,列字母和行号前面带有“$”符号。例如,如果将绝对引用单元格 B2 的公式从单元格 C3 复制到 D6,则引用将保持不变 ($B$2)。
公式中的混合单元格引用既可以从对单元格列的绝对引用和对单元格行的相对引用(例如,$B2)组合而成,也可以从对单元格列的相对引用和对单元格行的绝对引用(例如,A$1)组合而成。如果复制公式,则混合引用的绝对元素(以“$”符号开头的列字母或行号)将保持不变,并且将自动调整引用的相对元素。
例如,如果将带有 $C3 混合引用的公式从单元格 B2 复制到 D6,则引用将更改为 $C7。
还可以使用 R1C1 引用样式,其中行和列在工作表中均编号。若要在工作簿中打开此样式,请使用 DocumentSettings.R1C1ReferenceStyle 属性。R1C1 样式的单元格引用是“R”后跟行号和“C”后跟列号的组合。
与 A1 单元格引用样式一样,R1C1 单元引用样式也支持相对、绝对和混合引用类型。
在相对 R1C1 单元格引用中,行号和列号用方括号括起来。正数是指相对于包含公式的单元格,位于下方和/或右侧的单元格。负数是指相对于包含公式的单元格上方和/或左侧的单元格。
如果 R1C1 单元格引用不包含行号或列号,则它引用包含具有公式的单元格的同一行或同一列中的单元格。
在 R1C1 样式中复制具有相对单元格引用的公式时,这些单元格引用的表示法在复制的公式中保持不变,而每个复制的公式的 A1 相对引用将更改,以保留引用的单元格和包含公式的单元格的相对位置。
在绝对 R1C1 单元格引用中,使用不带括号的行号和列号。
R1C1 单元格引用可以从对单元格行的绝对引用和对单元格列的相对引用(例如,R10C[-5])组合而成,也可以从对单元格行的相对引用和对单元格列的绝对引用(例如,R[3]C5)组合而成。
注意
如果在工作簿中打开了 R1C1 单元格引用样式,则 A1 引用不能在公式中使用,反之亦然。当您更改工作簿中的活动单元格引用样式时,会自动调整公式中使用的单元格引用的样式。
在公式中,可以使用对位于其他工作表中的单元格的引用。为此,请在单元格引用之前指定工作表名称,并用感叹号 (!) 分隔它们。
在单元格引用中使用工作表名称时,在以下情况下,请将其括在单引号 (') 中。
如果重命名工作表,则此工作表名称将在使用该工作表的所有单元格引用中自动更新。
Vb.Net |
' 位于不同工作表中的单元格的值总和。 workbook.Worksheets("Sheet1").Cells("H15").Formula = "= Sheet2!C3 + Sheet3!C5" |
C# |
// 位于不同工作表中的单元格的值总和。 workbook.Worksheets["Sheet1"].Cells["H15"].Formula = "= Sheet2!C3 + Sheet3!C5"; |
3D 引用允许您处理工作簿中多个工作表上相同单元格中包含的数据。若要创建 3D 引用,请在单元格(或单元格区域)引用之前指定工作表名称的范围,并用感叹号 (!) 分隔它们。
例如,下图中的公式对工作表 Sheet2、Sheet3、Sheet2 和 Sheet3 上的单元格 B4 到 C5 中的所有值求和。如果在 Sheet2 和 Sheet5 之间插入其他工作表(例如,通过创建新工作表,或者通过复制或移动现有工作表),则添加的工作表的 B2:C3 单元格区域将包含在计算中。如果从 Sheet2:Sheet5 工作表区域中删除工作表,则这些工作表的值将从计算中排除。
引用另一个工作簿中的单元格、单元格区域或定义名称的引用称为外部引用。 为了使用外部引用,所有引用的工作簿都应包含在包含外部引用的工作簿的 Workbook.ExternalWorkbooks 集合中。
注意
不建议创建彼此之间具有循环引用的外部工作簿。在这种情况下,您可能会得到不正确的计算结果,因为我们的内部计算引擎不会跟踪外部工作簿单元格之间的依赖关系。
外部引用包括工作簿文件的完整路径、方括号 ([ ]) 中的工作簿文件名、工作表名称、感叹号 (!) 和单元格引用。例如,='c:\Temp[Book1.xlsx]Sheet1'!B3.
使用带有 alias 参数的 ExternalWorkbookCollection.Add 方法可以指定自定义工作簿名称,该名称可以在外部引用中使用,而不是原始文件名,或者在外部工作簿未保存到文件中时使用该名称。在这种情况下,外部引用包括方括号 ([ ]) 中的指定工作簿名称、工作表名称、感叹号 (!) 和单元格引用,如下例所示。
Vb.Net |
'访问要在其中使用外部引用的当前工作簿。 Dim workbook As DevExpress.Spreadsheet.Workbook = New DevExpress.Spreadsheet.Workbook() Dim worksheet As DevExpress.Spreadsheet.Worksheet = workbook.Worksheets(0) '访问包含当前工作簿中要引用的单元格的源工作簿。 Dim sourceWorkbook As DevExpress.Spreadsheet.Workbook = New DevExpress.Spreadsheet.Workbook() sourceWorkbook.LoadDocument("c:\Temp\Book1.xlsx") '将源工作簿添加到外部工作簿集合 '并指定可在外部引用中使用的自定义名称,而不是文件名。 workbook.ExternalWorkbooks.Add(sourceWorkbook, "MyExternalWorkbook") '在当前工作簿中创建外部引用。 worksheet("C3").Formula = "=[MyExternalWorkbook]Sheet1!B3" |
C# |
// 访问要在其中使用外部引用的当前工作簿。 DevExpress.Spreadsheet.Workbook workbook = new DevExpress.Spreadsheet.Workbook(); DevExpress.Spreadsheet.Worksheet worksheet = workbook.Worksheets[0]; // 访问包含当前工作簿中要引用的单元格的源工作簿。 DevExpress.Spreadsheet.Workbook sourceWorkbook = new DevExpress.Spreadsheet.Workbook(); sourceWorkbook.LoadDocument(@"c:\Temp\Book1.xlsx"); //将源工作簿添加到外部工作簿集合 //并指定可在外部引用中使用的自定义名称,而不是文件名。 workbook.ExternalWorkbooks.Add(sourceWorkbook, "MyExternalWorkbook"); // 在当前工作簿中创建外部引用。 worksheet["C3"].Formula = "=[MyExternalWorkbook]Sheet1!B3"; |
对另一个工作簿中已定义名称的外部引用包括源工作簿名称、感叹号 (!) 和定义的名称。例如,=book.xlsx!range_name。
如果定义名称的范围是另一个工作簿中的工作表,请在外部引用中指定此工作表名称。例如,=[book.xlsx]Sheet3!range_name。
结构化引用允许您引用表 (Table) 和表中的不同范围。结构化引用具有以下语法。
=TableName[[#Data],[ColumnName]]
TableName 是表名 (Table.Name)。
[#Data]
是一个特殊的项说明符,它引用表或表列的数据范围(如当前示例所示)。还可以在结构化引用中使用以下特殊项说明符来引用表或表列的特定部分:[#All]、[#Headers]、[#Totals]
和 [#This 行]。
[ColumnName] 是表列说明符
(TableColumn.Name)。如果前面没有任何特殊项说明符,则表列说明符将引用列数据区域(不包括列标题和单元格总数)。
若要在结构化引用中组合列说明符,可以使用以下运算符:冒号 - 引用两个或多个相邻列的范围,逗号 - 引用两个或多个列的组合,空格 - 引用两个或多个列的交集。
下图说明了使用不同特殊项说明符和引用运算符的结构化引用示例(工作簿在 Microsoft® Excel® 中打开)。