Aspose.Cells in Varsayılan Hesaplama Motorunu Genişletmek

Özel Hesaplama Motorunu Uygulama

Aşağıdaki kod, Özelleştirilmiş Hesaplama Motorunu uygular. Sadece bir yöntemi olan AbstractCalculationEngine arayüzünü uygular, bu metod calculate(CalculationData data)dır. Bu yöntem, formüllerinizin tümüne karşı çağrılır. Bu yöntem içinde, BUGÜN (TODAY) fonksiyonunu yakalıyor ve sistem tarihine bir gün ekliyoruz. Yani, şu anki tarih 27/07/2023 ise, özel motor BUGÜN() fonksiyonunu 28/07/2023 olarak hesaplar.

Programlama Örneği

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

Sonuç

Lütfen yukarıdaki örnek kodun konsol çıktısını kontrol edin, özel motor ile A1’in değeri (tarih saati) motor olmadan sonuçtan bir gün sonraki olmalıdır.

İlgili Makale