[]
表格公式是指在工作表中用作结构化引用而不是显式单元格引用的公式。
创建表公式时,用户必须应用结构化引用(电子表格中表名和列名的组合)以及语法规则。
例如,让我们参考工作表中的表格公式,如下所示。
上表公式中的结构化参考组分如下所述。
组件 | 描述 |
---|---|
表名 | 引用表数据,不包含任何标题或总行。您可以使用默认的表名,例如Table1,或将其更改为使用自定义名。 示例:DeptSales是表格公式中的自定义表格名称。 |
列说明符 | 列说明符使用它们表示的列的名称。它们引用的列数据没有任何列标题或总行。在表公式中编写列说明符时,必须将它们放在[]方括号中。 示例:[SalesAmount]和[ComAmt] |
项目说明符 | 指表的特定部分,例如总行。 示例:[#Totals]和[#Data] |
表说明符 | 表示结构化引用的外部。外部引用紧跟表格名称,并括在方括号内。 示例:[[#Totals],[SalesAmount]],[[#Data],[ComAmt]] |
结构引用 | 由以表名开头和以列说明符结束的字符串表示。 示例:DeptSales [[#Totals],[SalesAmount]]和DeptSales [[#Data],[ComAmt]] |
在GcExcel Java中,您可以使用引用运算符,以便在表公式中组合列说明符。
请参考下表,该表描述了引用运算符以及与该表公式相对应的结构化引用组件和单元格范围。
运算符 | 描述 | 示例 |
---|---|---|
:(冒号)范围运算符 | 两个或更多相邻列中的所有单元格。 | =DeptSales[[SalesPerson]:[Region]] |
,(逗号)组合运算符 | 两列或更多列的组合。 | =DeptSales[SalesAmount],DeptSales[ComAmt] |
(space) 交集运算符 | 两列或多列的交集。 | =DeptSales[[SalesPerson]:[SalesAmount]]DeptSales[[Region]:[ComPct]] |
特殊项目说明符是指表公式中的特定区域,该区域以#前缀或@前缀标识。
GcExcel Java支持以下类型的特殊项目说明符:
特殊项目说明符 | 描述 |
---|---|
#All | 到整个表,包括列标题,数据和总计 |
#Data | 仅数据行 |
#Headers | 仅标题行 |
#Totals | 只有总行。如果没有,则返回null。 |
#This Row | 单元格与公式在同一行 |
@ | 单元格与公式在同一行 |
请参考以下示例代码,以在电子表格中设置表格公式。
Object[][] data = new Object[][]
{
{ "SalesPerson", "Region", "SalesAmount", "ComPct", "ComAmt" },
{ "Joe", "North", 260, 0.10, null },
{ "Robert", "South", 660, 0.15, null },
};
worksheet.getRange("A1:E3").setValue(data);
worksheet.getTables().add(worksheet.getRange("A1:E3"), true);
worksheet.getTables().get(0).setName("DeptSales");
worksheet.getTables().get(0).getColumns().get("ComPct").getDataBodyRange().setNumberFormat("0%");
// Use table formula in table range.
worksheet.getTables().get(0).getColumns().get("ComAmt").getDataBodyRange().setFormula("=[@ComPct]*[@SalesAmount]");
// Use table formula out of table range.
worksheet.getRange("F2").setFormula("=SUM(DeptSales[@SalesAmount])");
worksheet.getRange("G2").setFormula("=SUM(DeptSales[[#Data],[SalesAmount]])");
worksheet.getRange("H2").setFormula("=SUM(DeptSales[SalesAmount])");
worksheet.getRange("I2").setFormula("=SUM(DeptSales[@ComPct], DeptSales[@ComAmt])");