找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-12-22 15:46  /   查看:3018  /  回复:0
GcExcel可以像SpreadJS一样提供自定义函数满足用户的一些特殊的计算逻辑。有时候,我们有通过一个函数来给一片区域赋值的需求。例如:我有一份数据需要按月份查询并显示,这个时候我的设计就可以通过一个函数,函数的参数来传递查询结果,将查询结果显示在一个区域中。
这个时候需要借助GcExcel的自定义函数与数组公式结合来完成。
相关代码如下:
  1. public class TestCustomFunction {
  2.        
  3.         class MyCustomFunction extends CustomFunction{

  4.                 public MyCustomFunction() {
  5.                         super("MyCustomFunciton", FunctionValueType.Number,
  6.                                         new Parameter[] { new Parameter(FunctionValueType.Object)});
  7.                 }

  8.                 @Override
  9.                 public Object[][] evaluate(Object[] arg0, ICalcContext arg1) {
  10.                         // TODO Auto-generated method stub
  11.                         Object[][] result = new Object[100][100];
  12.                 for (int i = 0; i < 100; i++){
  13.                         for(int j=0;j<100;j++) {
  14.                                 result[i][j] = i+j;
  15.                         }
  16.                 }
  17.                 return result;
  18.                 }
  19.                
  20.         }
  21.         public static void main(String[] args) {
  22.                 Workbook workbook = new Workbook();
  23.             Workbook.AddCustomFunction(new TestCustomFunction().new MyCustomFunction());
  24.             IWorksheet worksheet = workbook.getActiveSheet();
  25.             worksheet.getRange(0,0,100,100).setFormulaArray("=MyCustomFunciton()");
  26.             Object[][]  data = (Object[][]) worksheet.getRange(0,0,100,100).getValue();
  27.             for(int i=0;i<data.length;i++) {
  28.                     for(int j=0;j<data[i].length;j++) {
  29.                             System.out.println(data[i][j]);
  30.                     }
  31.             }
  32.         }
  33. }
复制代码
代码中通过定义一个自定义函数,将函数的返回类型设置为二位数组,之后设置时结合数组公式用setFormulaArray进行设置,以达到用函数给一片区域赋值的操作。

0 个回复

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