实施自定义计算引擎以扩展 Aspose.Cells 的默认计算引擎

实施自定义计算引擎

Aspose.Cells具有强大的计算引擎,可以计算几乎所有的Microsoft Excel公式。尽管如此,它还允许您扩展默认计算引擎,从而为您提供更强大的功能和灵活性。

以下属性和类用于实现此功能。

以下代码实现自定义计算引擎。它实现了接口**抽象计算引擎**它有一个**计算(CalculationData 数据)**方法。针对您的所有公式调用此方法。在这个方法中,我们捕获**和**公式并将其值增加 30。因此,如果 Aspose.Cells 计算值是 20,那么我们的自定义引擎将通过添加 30 使其变为 50。

编程范例

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
// Create a new class derived from AbstractCalculationEngine
class CustomEngine : AbstractCalculationEngine
{
// Override the Calculate method with custom logic
public override void Calculate(CalculationData data)
{
// Check the forumla name and change the implementation
if (data.FunctionName.ToUpper() == "TODAY")
{
// Assign the CalculationData.CalculatedValue: add one day offset for the date
data.CalculatedValue = CellsHelper.GetDoubleFromDateTime(DateTime.Today, false) + 1.0;
}
}
public override bool ProcessBuiltInFunctions { get { return true; } }
}
class ImplementCustomCalculationEngine
{
public static void Run()
{
// Create an instance of Workbook
Workbook workbook = new Workbook();
// Access first Worksheet from the collection
Worksheet sheet = workbook.Worksheets[0];
// Access Cell A1 and put a formula to sum values of B1 to B2
Cell a1 = sheet.Cells["A1"];
Style style = a1.GetStyle();
style.Number = 14;
a1.SetStyle(style);
a1.Formula = "=TODAY()";
// Calculate all formulas in the Workbook
workbook.CalculateFormula();
// The result of A1 should be 20 as per default calculation engine
Console.WriteLine("The value of A1 with default calculation engine: " + a1.StringValue);
// Create an instance of CustomEngine
CustomEngine engine = new CustomEngine();
// Create an instance of CalculationOptions
CalculationOptions opts = new CalculationOptions();
// Assign the CalculationOptions.CustomEngine property to the instance of CustomEngine
opts.CustomEngine = engine;
// Recalculate all formulas in Workbook using the custom calculation engine
workbook.CalculateFormula(opts);
// The result of A1 will be 50 as per custom calculation engine
Console.WriteLine("The value of A1 with custom calculation engine: " + a1.StringValue);
Console.WriteLine("Press any key to continue...");
Console.ReadKey();
}
}

控制台输出

这是上述示例代码的控制台输出。

Without Custom Engine Value of A1: 20

With Custom Engine Value of A1: 50

相关文章