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

Özel Hesaplama Motorunu Uygulama

Aşağıdaki kod özel Hesaplama Motorunu uygular. Yalnızca bir methoda calculate(CalculationData data) sahip olan AbstractCalculationEngine arabirimini uygular. Bu method, bütün formülleriniz üzerinde çağrılır. Bu methodun içinde, TODAY fonksiyonunu yakalar ve sistem tarihine bir gün ekler. Bu nedenle, eğer mevcut tarih 27/07/2023 ise, özel motor TODAY() fonksiyonunu 28/07/2023 olarak hesaplayacaktır.

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