カスタム計算エンジンを実装して、Aspose.Cells のデフォルト計算エンジンを拡張します
Contents
[
Hide
]
カスタム計算エンジンの実装
Aspose.Cells には、ほとんどすべての Microsoft Excel 数式を計算できる強力な計算エンジンがあります。それにもかかわらず、デフォルトの計算エンジンを拡張することもでき、より優れた機能と柔軟性を提供します。
この機能の実装には、次のプロパティとクラスが使用されます。
次のコードは、カスタム計算エンジンを実装します。インターフェースを実装します**AbstractCalculationEngine**を持っている**Calculate(CalculationData データ)**方法。このメソッドは、すべての数式に対して呼び出されます。このメソッド内で、**和**したがって、Aspose.Cells の計算値が 20 の場合、カスタム エンジンは 30 を加算して 50 にします。
プログラミングサンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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