تنفيذ محرك الحساب المخصص لتوسيع محرك الحساب الافتراضي لـ Aspose.Cells

تنفيذ محرك الحساب المخصص

يطبق الشفرة التالية محرك الحساب المخصص. ينفذ الواجهة AbstractCalculationEngine التي تحتوي على طريقة واحدة فقط calculate(CalculationData data). تُستدعى هذه الطريقة ضد جميع صيغك. داخل هذه الطريقة، نلتقط وظيفة TODAY ونضيف يومًا واحدًا إلى تاريخ النظام. لذلك إذا كان التاريخ الحالي هو 27/07/2023، فإن المحرك المخصص سيحسب TODAY() على أنها 28/07/2023.

نموذج برمجة

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

النتيجة

يرجى التحقق من إخراج الوحدة لمثال الشفرة أعلاه ، يجب أن يكون قيمة (التاريخ والوقت) لـ A1 مع محرك مخصص بعد يوم واحد عن النتيجة بدون محرك مخصص.

مقال ذو صلة