[]
动态数组是将多个值(在一个数组中)返回到工作表上某个单元格区域的公式。因此,相邻单元格将根据单个输入的公式填充结果(计算数据)。这种行为称为 Spilling(溢出),公式结果填充的范围被称之为 Spill Range(溢出范围)。溢出范围的操作符(#)可用于引用整个溢出范围。
GcExcel 对于需要在工作表中使用动态数组公式的用户,可以通过 IRange.setFormula2 方法在工作表中定义动态数组公式。它允许用户在不自动添加隐式交集运算符的情况下指定公式。要启用动态数组公式的使用,需要通过 setFormula2 方法设置指定 IRange 区域的公式。
注意: 在 v5.0 版本中,setAllowDynamicArray 方法已过时。该方法目前仍可与 IRange 一起使用。setFormula 方法兼容 v4.2 版本。但是,我们建议使用新的 setFormula2 方法,因为将来可能会删除 setAllowDynamicArray 方法。
您还可以使用 CalcError 枚举来指定计算错误的类型:
Calc:当计算引擎遇到当前不支持的场景时发生。
Spill:当公式返回多个结果,但无法将这些值返回到相邻单元格时发生。
GcExcel 中添加了以下动态数组函数:
函数 | 类别 | 描述 |
---|---|---|
FILTER | 查找和引用 | 根据定义的条件筛选一系列数据。 |
RANDARRAY | 数学与三角函数 | 返回介于 0 和 1 之间的随机数数组。 |
SEQUENCE | 数学与三角函数 | 生成数组中的序列号列表,例如1、2、3、4。 |
SINGLE | 查找和引用 | 返回单个值,逻辑等同于隐式交集运算符。 |
SORT | 查找和引用 | 对范围或数组的内容进行排序。 |
SORTBY | 查找和引用 | 根据相应范围或数组中的值对范围或数组的内容进行排序 |
UNIQUE | 查找和引用 | 返回列表或范围中唯一值 |
请参阅以下示例代码,以通过指定条件启用动态数组公式并使用筛选函数。
//create a new workbook
Workbook workbook = new Workbook();
IWorksheet sheet = workbook.getWorksheets().get(0);
sheet.setName("FILTER");
sheet.getRange("A1").setValue("The FILTER function filters a range or array based on criteria you specify. Syntax: FILTER(array,include,[if_empty])");
sheet.getRange("B3:E19").setValue(new Object[][] {
{ "Region", "Sales Rep", "Product", "Units" },
{ "East", "Tom", "Apple", 6380 },
{ "West", "Fred", "Grape", 5619 },
{ "North ", "Amy", "Pear", 4565 },
{ "South", "Sal", "Banana", 5323 },
{ "East", "Fritz", "Apple", 4394 },
{ "West", "Sravan", "Grape", 7195 },
{ "North ", "Xi", "Pear", 5231 },
{ "South", "Hector", "Banana", 2427 },
{ "East", "Tom", "Banana", 4213 },
{ "West", "Fred", "Pear", 3239 },
{ "North ", "Amy", "Grape", 6420 },
{ "South", "Sal", "Apple", 1310 },
{ "East", "Fritz", "Banana", 6274 },
{ "West", "Sravan", "Pear", 4894 },
{ "North ", "Xi", "Grape", 7580 },
{ "South", "Hector", "Apple", 9814 }
});
sheet.getRange("G3:L4").setValue(new Object[][] { { "Criterion", "", "Product", "Units", "", "Total:" }, { 5000, null, null, null, null, null } });
sheet.getRange("I4").setFormula2("=FILTER(D4:E19,E4:E19>G4,\"\")");
sheet.getRange("L4").setFormula2("=SUM(IF(E4:E19>G4,1,0))");
sheet.getRange("E4:E19,G4,J4:J12").setNumberFormat("#,##0");
//save to an excel file
workbook.save("FilterFunction.xlsx");
下图显示了上述代码的输出,其中 Filter 方法设置于单元格I4。