カスタム計算エンジンを実装して、Aspose.Cells のデフォルト計算エンジンを拡張します

カスタム計算エンジンの実装

Aspose.Cells には、ほとんどすべての Microsoft Excel 数式を計算できる強力な計算エンジンがあります。それにもかかわらず、デフォルトの計算エンジンを拡張することもでき、より優れた機能と柔軟性を提供します。

この機能の実装には、次のプロパティとクラスが使用されます。

次のコードは、カスタム計算エンジンを実装します。インターフェースを実装します**AbstractCalculationEngine**を持っている**Calculate(CalculationData データ)**方法。このメソッドは、すべての数式に対して呼び出されます。このメソッド内で、**和**したがって、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

関連記事