找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-1-28 12:17  /   查看:2274  /  回复:0
本帖最后由 Clark.Pan 于 2022-1-28 12:17 编辑

众所周知,GcExcel中可以通过Formula相关方法来给单元格设置公式函数,例如:
  1. worksheet.getRange("A3").setFormula("=SUM(A1, A2)");
复制代码
本次GcExcel 5.0中,推出了一个全新的Formula2接口。它与之前的Formula接口有什么相同的地方和差异之处呢,让我们往下看:
先测试一般公式,如下面代码所示:
  1. Workbook workbook = new Workbook();
  2.                 IWorksheet worksheet = workbook.getActiveSheet();
  3.                 worksheet.getRange("A1").setValue(1);
  4.                 worksheet.getRange("A2").setValue(2);
  5.                 worksheet.getRange("A3").setFormula2("=SUM(A1:A2");
  6.                 worksheet.getRange("A4").setFormula("=SUM(A1:A2");
  7.                 System.out.println("Formula2:"+worksheet.getRange("A3").getValue());
  8.                 System.out.println("Formula:"+worksheet.getRange("A4").getValue());
复制代码
分别通过Formula 和 Formula2 设置相同的公式,运行结果如下:
image.png546662902.png
从上面可以看到,对于一般公式formula与formula2设置公式是没有任何差别的。接下来我们交换一下用Fomula获取A3的公式,Formula2获取A4的公式
  1. System.out.println(worksheet.getRange("A3").getFormula());
  2.                 System.out.println(worksheet.getRange("A4").getFormula2());
复制代码
结果如下,也是都可以获取到的。
image.png16374815.png
综上所述,对于一般的公式而言,Formula和Formula2是没有区别的。
接下来我们将公式换成动态数组公式,再看一下效果。
  1. worksheet.getRange("A1").setValue("Formula:");
  2.                 worksheet.getRange("A2").setFormula("=SEQUENCE(4,5)");
  3.                
  4.                 worksheet.getRange("A7").setValue("Formula2");
  5.                 worksheet.getRange("A8").setFormula2("=SEQUENCE(4,5)");
  6.                
  7.                 workbook.save("result.xlsx");
复制代码

如代码所示,我们分别通过setFormula和setFormula2设置相同的一个动态数组函数。该函数将会创建一个4行5列的序列
这次我们采用导出Excel,在Excel中查看结果,结果如下:
image.png185262145.png
可以看到这次两者有了明显的区别,Formula仅仅只有一个结果,而Formula2返回的结果是我们期望的一个4行5列的序列。
那么这两个设置的公式有什么不同呢,我们通过getFormula与getFormula2方法来看一下上述设置的公式是否存在区别。
  1. System.out.println(worksheet.getRange("A2").getFormula());
  2.                 System.out.println(worksheet.getRange("A8").getFormula());
  3.                
  4.                
  5.                 System.out.println(worksheet.getRange("A2").getFormula2());
  6.                 System.out.println(worksheet.getRange("A8").getFormula2());
复制代码
运行结果如下:
image.png559593810.png
前两个是用Formula接口去get公式得到的结果,可以看到都是一致的。后两个是用Formula2接口去get公式,可以看出差异
当获取之前用Formula接口设置的公式时,返回的是一个加了"@"符号的公式,在Excel中"@"有特殊的用法,叫做隐式交集运算符,利用隐式交集逻辑返回一个唯一的结果。简单来说就是数组公式本来返回的是一个区域结果,但是用了"@"后将只返回其中一个单元格的结果。这样的说明也印了上面Excel中为什么只有一个结果。
看上去在数组公式上,Formula2的表达相较于Formula更为严谨一些。

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



0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部