GcExcel可以像SpreadJS一样提供自定义函数满足用户的一些特殊的计算逻辑。有时候,我们有通过一个函数来给一片区域赋值的需求。例如:我有一份数据需要按月份查询并显示,这个时候我的设计就可以通过一个函数,函数的参数来传递查询结果,将查询结果显示在一个区域中。
这个时候需要借助GcExcel的自定义函数与数组公式结合来完成。
相关代码如下:
- public class TestCustomFunction {
-
- class MyCustomFunction extends CustomFunction{
- public MyCustomFunction() {
- super("MyCustomFunciton", FunctionValueType.Number,
- new Parameter[] { new Parameter(FunctionValueType.Object)});
- }
- @Override
- public Object[][] evaluate(Object[] arg0, ICalcContext arg1) {
- // TODO Auto-generated method stub
- Object[][] result = new Object[100][100];
- for (int i = 0; i < 100; i++){
- for(int j=0;j<100;j++) {
- result[i][j] = i+j;
- }
- }
- return result;
- }
-
- }
- public static void main(String[] args) {
- Workbook workbook = new Workbook();
- Workbook.AddCustomFunction(new TestCustomFunction().new MyCustomFunction());
- IWorksheet worksheet = workbook.getActiveSheet();
- worksheet.getRange(0,0,100,100).setFormulaArray("=MyCustomFunciton()");
- Object[][] data = (Object[][]) worksheet.getRange(0,0,100,100).getValue();
- for(int i=0;i<data.length;i++) {
- for(int j=0;j<data[i].length;j++) {
- System.out.println(data[i][j]);
- }
- }
- }
- }
复制代码 代码中通过定义一个自定义函数,将函数的返回类型设置为二位数组,之后设置时结合数组公式用setFormulaArray进行设置,以达到用函数给一片区域赋值的操作。
|
|