Implementar el motor de cálculo personalizado para ampliar el motor de cálculo predeterminado de Aspose.Cells
Aspose.Cells tiene un potente motor de cálculo que puede calcular casi todas las fórmulas de Excel Microsoft. A pesar de ello, también te permite ampliar el motor de cálculo predeterminado lo que te proporciona mayor potencia y flexibilidad.
Las siguientes propiedades y clases se utilizan para implementar esta función.
Implementar motor de cálculo personalizado
El código siguiente implementa el motor de cálculo personalizado. Implementa la interfazResumenCálculoMotor que tiene un solo métodocalcular (datos de datos de cálculo). Este método se llama contra todas sus fórmulas. Dentro de este método, capturamos elSUMA fórmula y aumenta su valor en 30. Entonces, si el valor calculado Aspose.Cells es 20, nuestro motor personalizado lo convertirá en 50 al agregar 30.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
public class CustomEngine extends AbstractCalculationEngine { | |
public void calculate(CalculationData data) { | |
if (data.getFunctionName().toUpperCase().equals("TODAY")) { | |
data.setCalculatedValue(CellsHelper.getDoubleFromDateTime(DateTime.getNow(), false) + 1.0); | |
} | |
} | |
public getProcessBuiltInFunctions() { return true; } | |
} | |
public static void main(String[] args) throws Exception { | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(ImplementCustomCalculationEngine.class); | |
Workbook workbook = new Workbook(); | |
Worksheet sheet = workbook.getWorksheets().get(0); | |
Cell a1 = sheet.getCells().get("A1"); | |
Style style = cell.getStyle(); | |
style.setNumber(14); | |
cell.setStyle(style); | |
a1.setFormula("=TODAY()"); | |
// Without Custom Engine, the value of cell A1 will be 20 | |
workbook.calculateFormula(); | |
System.out.println("Without Custom Engine Value of A1: " + a1.getStringValue()); | |
// With Custom Engine, the value of cell A1 will be 50 | |
CalculationOptions opts = new CalculationOptions(); | |
opts.setCustomEngine(new CustomEngine()); | |
workbook.calculateFormula(opts); | |
System.out.println("With Custom Engine Value of A1: " + a1.getStringValue()); | |
} |
Salida de consola
Aquí está la salida de la consola del código de muestra anterior.
Without Custom Engine Value of A1: 20
With Custom Engine Value of A1: 50