Implementera anpassad beräkningsmotor för att utöka Aspose.Cells standardberäkningsmotor

Implementera anpassad beräkningsmotor

Följande kod implementerar den anpassade beräkningsmotorn. Den implementerar gränssnittet AbstractCalculationEngine som har endast en metod calculate(CalculationData data). Denna metod anropas för alla dina formler. Inuti denna metod fångar vi in ​​TODAY-funktionen och lägger till en dag till systemdatumet. Så om det aktuella datumet är 27/07/2023, kommer den anpassade motorn att beräkna TODAY() som 28/07/2023.

Programmeringsexempel

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

Resultat

Vänligen kolla konsolens utmatning av den ovanstående provkoden, värdet (datumtid) av A1 med anpassad motor bör vara en dag senare än resultatet utan anpassad motor.

Relaterad artikel