Implementieren eines benutzerdefinierten Berechnungsmotors zur Erweiterung des standardmäßigen Berechnungsmotors von Aspose.Cells

Benutzerdefinierten Berechnungsmotor implementieren

Der folgende Code implementiert den benutzerdefinierten Berechnungsmotor. Er implementiert das Interface AbstractCalculationEngine, das nur eine Methode calculate(CalculationData data) hat. Diese Methode wird für all Ihre Formeln aufgerufen. In dieser Methode erfassen wir die HEUTE-Funktion und fügen dem Systemdatum einen Tag hinzu. Wenn das aktuelle Datum beispielsweise der 27/07/2023 ist, berechnet der benutzerdefinierte Motor HEUTE() als 28/07/2023.

Programmierbeispiel

// 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());
}

Ergebnis

Bitte überprüfen Sie die Konsolenausgabe des obigen Beispielcodes, der Wert (Datum/Uhrzeit) von A1 mit benutzerdefiniertem Motor sollte einen Tag später sein als das Ergebnis ohne benutzerdefinierten Motor.

Verwandter Artikel