// Create a new workbook Workbook workbook = new Workbook(); Workbook.AddCustomFunction(new MySumFunctionX()); IWorksheet worksheet = workbook.getActiveSheet(); worksheet.getRange("A1").setValue(1); worksheet.getRange("B1").setValue(2); worksheet.getRange("C1").setFormula("=MySum(A1:B1, 2, {3,4})"); //getRange("C1")'s value is 12. Object result = worksheet.getRange("C1").getValue(); /* Implementation of MyAddFunctionX class MySumFunctionX extends CustomFunction { public MySumFunctionX() { super("MySum", FunctionValueType.Number, CreateParameters()); } private static Parameter[] CreateParameters() { Parameter[] parameters = new Parameter[254]; for (int i = 0; i < 254; i++) { parameters[i] = new Parameter(FunctionValueType.Object); } return parameters; } @Override public Object evaluate(Object[] arguments, ICalcContext context) { double sum = 0d; for (Object argument : arguments) { Iterable iterator = toIterable(argument); for (Object item : iterator) { if (item instanceof CalcError) { return item; } if (item instanceof Double) { sum += (double) item; } } } return sum; } private static Iterable toIterable(Object obj) { if (obj instanceof Iterable) { return (Iterable) obj; } else if (obj instanceof Object[][]) { List list = new ArrayList(); Object[][] array = (Object[][]) obj; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { list.add(array[i][j]); } } return list; } else { List list = new ArrayList(); list.add(obj); return list; } } } */