Clark.Pan 发表于 2022-1-28 12:17:16

GcExcel 5.0 新特性 - 专用于动态数组公式的 Formula2接口

本帖最后由 Clark.Pan 于 2022-1-28 12:17 编辑

众所周知,GcExcel中可以通过Formula相关方法来给单元格设置公式函数,例如:
worksheet.getRange("A3").setFormula("=SUM(A1, A2)");本次GcExcel 5.0中,推出了一个全新的Formula2接口。它与之前的Formula接口有什么相同的地方和差异之处呢,让我们往下看:
先测试一般公式,如下面代码所示:Workbook workbook = new Workbook();
                IWorksheet worksheet = workbook.getActiveSheet();
                worksheet.getRange("A1").setValue(1);
                worksheet.getRange("A2").setValue(2);
                worksheet.getRange("A3").setFormula2("=SUM(A1:A2");
                worksheet.getRange("A4").setFormula("=SUM(A1:A2");
                System.out.println("Formula2:"+worksheet.getRange("A3").getValue());
                System.out.println("Formula:"+worksheet.getRange("A4").getValue());分别通过Formula 和 Formula2 设置相同的公式,运行结果如下:

从上面可以看到,对于一般公式formula与formula2设置公式是没有任何差别的。接下来我们交换一下用Fomula获取A3的公式,Formula2获取A4的公式
System.out.println(worksheet.getRange("A3").getFormula());
                System.out.println(worksheet.getRange("A4").getFormula2());结果如下,也是都可以获取到的。

综上所述,对于一般的公式而言,Formula和Formula2是没有区别的。
接下来我们将公式换成动态数组公式,再看一下效果。
worksheet.getRange("A1").setValue("Formula:");
                worksheet.getRange("A2").setFormula("=SEQUENCE(4,5)");
               
                worksheet.getRange("A7").setValue("Formula2");
                worksheet.getRange("A8").setFormula2("=SEQUENCE(4,5)");
               
                workbook.save("result.xlsx");
如代码所示,我们分别通过setFormula和setFormula2设置相同的一个动态数组函数。该函数将会创建一个4行5列的序列
这次我们采用导出Excel,在Excel中查看结果,结果如下:

可以看到这次两者有了明显的区别,Formula仅仅只有一个结果,而Formula2返回的结果是我们期望的一个4行5列的序列。
那么这两个设置的公式有什么不同呢,我们通过getFormula与getFormula2方法来看一下上述设置的公式是否存在区别。
System.out.println(worksheet.getRange("A2").getFormula());
                System.out.println(worksheet.getRange("A8").getFormula());
               
               
                System.out.println(worksheet.getRange("A2").getFormula2());
                System.out.println(worksheet.getRange("A8").getFormula2());运行结果如下:

前两个是用Formula接口去get公式得到的结果,可以看到都是一致的。后两个是用Formula2接口去get公式,可以看出差异
当获取之前用Formula接口设置的公式时,返回的是一个加了"@"符号的公式,在Excel中"@"有特殊的用法,叫做隐式交集运算符,利用隐式交集逻辑返回一个唯一的结果。简单来说就是数组公式本来返回的是一个区域结果,但是用了"@"后将只返回其中一个单元格的结果。这样的说明也印了上面Excel中为什么只有一个结果。
看上去在数组公式上,Formula2的表达相较于Formula更为严谨一些。

至此,我们可以看出Formula与Formula2接口在动态数组的设置上有着不同,Formula2的官方解释是专用于动态数组公式的接口也合情合理。



页: [1]
查看完整版本: GcExcel 5.0 新特性 - 专用于动态数组公式的 Formula2接口