Implementera anpassad beräkningsmotor för att utöka Aspose.Cells standardberäkningsmotor
Aspose.Cells har en kraftfull beräkningsmotor som kan beräkna nästan alla Microsoft Excel formler. Trots detta tillåter det dig också att utöka standardberäkningsmotorn vilket ger dig större kraft och flexibilitet.
Följande egenskap och klasser används vid implementering av denna funktion.
Implementera anpassad beräkningsmotor
Följande kod implementerar den Anpassade Beräkningsmotorn. Det implementerar gränssnittet AbstractCalculationEngine som bara har en metod calculate(CalculationData data). Denna metod anropas mot alla dina formler. Inne i denna metod fångar vi funktionen TODAY och lägger till en dag till systemdatum. Så om aktuellt datum ä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.