// Create a new workbook Workbook workbook = new Workbook(); try { Workbook.AddCustomFunction(new BigIntegerPowFunction()); } catch (RuntimeException ex) { // Function was added } // End Try try { Workbook.AddCustomFunction(new BigIntegerMultiplyFunction()); } catch (RuntimeException ex) { // Function was added } // End Try try { Workbook.AddCustomFunction(new GreatestCommonDivisionFunction()); } catch (RuntimeException ex) { // Function was added } // End Try // Use BigInteger to calculate results IWorksheet worksheet = workbook.getActiveSheet(); worksheet.getRange("A1").setValue("154382190 ^ 3 = "); worksheet.getRange("A2").setValue("1643590 * 166935 = "); worksheet.getRange("A3").setValue("Greatest common division = "); worksheet.getRange("B1").setFormula("=BIG.INTEGER.POW(\"154382190\", 3)"); worksheet.getRange("B2").setFormula("=BIG.INTEGER.MULT(\"1643590\", \"166935\")"); worksheet.getRange("B3").setFormula("=BIG.INTEGER.GCD(B1,B2)"); // Arrange worksheet.getColumns().get(0).autoFit(); worksheet.getColumns().get(1).setColumnWidth(worksheet.getRange("B1").getText().length() + 1); // Formula implementation // public static class BigIntegerMultiplyFunction extends CustomFunction // { // public BigIntegerMultiplyFunction() // { // super("BIG.INTEGER.MULT", FunctionValueType.Object, new Parameter[] // { // new Parameter(FunctionValueType.Text), // new Parameter(FunctionValueType.Text) // }); // } // @Override // public Object evaluate(Object[] arguments, ICalcContext context) // { // if (!(arguments[0] instanceof String) || !(arguments[1] instanceof String)) // { // return CalcError.Value; // } // String leftNumber = (String)arguments[0]; // String rightNumber = (String)arguments[1]; // try // { // return new BigInteger(leftNumber).multiply(new BigInteger(rightNumber)); // } // catch (NumberFormatException e) // { // return CalcError.Value; // } // catch (ArithmeticException e2) // { // return CalcError.Value; // } // } // } // public static class BigIntegerPowFunction extends CustomFunction // { // public BigIntegerPowFunction() // { // super("BIG.INTEGER.POW", FunctionValueType.Object, new Parameter[] // { // new Parameter(FunctionValueType.Text), // new Parameter(FunctionValueType.Number) // }); // } // @Override // public Object evaluate(Object[] arguments, ICalcContext context) // { // if (!(arguments[0] instanceof String) || !(arguments[1] instanceof Double)) // { // return CalcError.Value; // } // String number = (String)arguments[0]; // double exp = (Double)arguments[1]; // if (exp > Integer.MAX_VALUE || exp < Integer.MIN_VALUE) // { // return CalcError.Value; // } // int iExp = CInt(exp); // try // { // return new BigInteger(number).pow(iExp); // } // catch (NumberFormatException e) // { // return CalcError.Value; // } // catch (ArithmeticException e2) // { // return CalcError.Value; // } // } // public static int CInt(double source) // { // int floor = (int)Math.floor(source); // if (Math.abs(source - floor) == 0.5) // { // if (floor % 2 == 0) // return floor; // else // return (int)Math.ceil(source); // } // else if (Math.abs(source - floor) < 0.5) // return floor; // else // return (int)Math.ceil(source); // } // } // public static class GreatestCommonDivisionFunction extends CustomFunction // { // public GreatestCommonDivisionFunction() // { // super("BIG.INTEGER.GCD", FunctionValueType.Object, new Parameter[] // { // new Parameter(FunctionValueType.Object, false, true), // new Parameter(FunctionValueType.Object, false, true) // }); // } // @Override // public Object evaluate(Object[] arguments, ICalcContext context) // { // if (!(arguments[0] instanceof BigInteger) || !(arguments[1] instanceof BigInteger)) // { // return CalcError.Value; // } // BigInteger leftNumber = (BigInteger)arguments[0]; // BigInteger rightNumber = (BigInteger)arguments[1]; // try // { // return leftNumber.gcd(rightNumber); // } // catch (ArithmeticException e) // { // return CalcError.Value; // } // } // } // Save to a pdf file workbook.save("CustomObjectInCustomFunction.pdf");