Реализовать пользовательский механизм расчета, чтобы расширить механизм расчета по умолчанию Aspose.Cells.
Aspose.Cells имеет мощный вычислительный механизм, который может вычислять почти все формулы Microsoft Excel. Несмотря на это, он также позволяет расширить механизм расчета по умолчанию, что обеспечивает большую мощность и гибкость.
При реализации этой функции используются следующие свойства и классы.
Реализовать пользовательский механизм расчета
Следующий код реализует пользовательский механизм вычислений. Он реализует интерфейсАннотацияРасчетДвигатель который имеет только один методвычислить (данные вычисления). Этот метод вызывается для всех ваших формул. Внутри этого метода мы фиксируемСУММА формуле и увеличивает ее значение на 30. Таким образом, если вычисленное значение Aspose.Cells равно 20, то наш пользовательский движок сделает его равным 50, добавив 30.
// 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()); | |
} |
Консольный вывод
Вот вывод консоли приведенного выше примера кода.
Without Custom Engine Value of A1: 20
With Custom Engine Value of A1: 50