動的に数式を計算または再計算する

Aspose.Cellsには数式計算エンジンが組み込まれています。デザイナーファイルからインポートされた数式を再計算するだけでなく、ランタイムで追加された数式の結果を計算することもサポートしています。

数式の追加と結果の計算

Aspose.Cellsは、Microsoft Excelの一部であるほとんどの数式や関数をサポートしています。開発者はこれらの数式をAPIまたはデザイナースプレッドシートを使用して利用することができます。Aspose.Excelは、数学、文字列、ブール、日付/時刻、統計、データベース、ルックアップ、参照などの強力な数式セットをサポートしています。

セルに数式を追加するには、CellクラスのFormulaプロパティを使用します。セルに数式を適用する場合は、常に等号(=)で文字列を始める必要があります。これはMicrosoft Excelで数式を作成するときと同じです。関数パラメータを区切るためにコンマ(,)を使用します。

数式の結果を計算するには、ExcelクラスのCalculateFormulaメソッドを呼び出し、Excelファイルに埋め込まれた全ての数式を処理します。[url: CalculateFormulaメソッドでサポートされる関数のリスト](/cells/ja/net/supported-formula-functions/)を参照してください。

 //Instantiating a Workbook object

Workbook workbook = new Workbook();

//Adding a new worksheet to the Excel object

int sheetIndex = workbook.Worksheets.Add();

//Obtaining the reference of the newly added worksheet by passing its sheet index

Worksheet worksheet = workbook.Worksheets[sheetIndex];

//Adding a value to "A1" cell

worksheet.Cells["A1"].PutValue(1);

//Adding a value to "A2" cell

worksheet.Cells["A2"].PutValue(2);

//Adding a value to "A3" cell

worksheet.Cells["A3"].PutValue(3);

//Adding a SUM formula to "A4" cell

worksheet.Cells["A4"].Formula = "=SUM(A1:A3)";

//Calculating the results of formulas

workbook.CalculateFormula();

//Get the calculated value of the cell

string value = worksheet.Cells["A4"].Value.ToString();

//Saving the Excel file

workbook.Save("Adding Formula.xls");

一度だけ数式を計算する

ユーザーがWorkbook.CalculateFormula()を呼び出して、ワークブックテンプレート内の数式の値を計算すると、Aspose.Cellsは計算チェーンを作成します。これにより、2回目や3回目などの数式の計算が高速化されます。 ただし、ユーザーテンプレートにさまざまな数式が含まれている場合、数式の最初の計算には多くのCPU処理時間とメモリが必要です。

Aspose.Cellsでは、数式計算チェーンの作成を無効にすることができます。これは、ファイルの数式を1回だけ計算したい場合に役立ちます。

Aspose.Cellsの数式の計算パフォーマンスを向上させたい場合で、数式計算チェーンを作成したくない場合は、FormulaSettings.EnableCalculationChainをfalseに設定してください。デフォルトでは、trueに設定されています。

 string FilePath = @"..\..\..\Sample Files\";

string FileName = FilePath + "Adding Formula.xlsx";

//Load the template workbook

Workbook workbook = new Workbook(FileName);

//Print the time before formula calculation

Console.WriteLine(DateTime.Now);

//Set the CreateCalcChain as false

workbook.Settings.FormulaSettings.EnableCalculationChain = false;

//Calculate the workbook formulas

workbook.CalculateFormula();

//Print the time after formula calculation

Console.WriteLine(DateTime.Now);

workbook.Save(FileName);

数式の直接計算

数式計算エンジンはAspose.Cellsに組み込まれています。また、デザイナーファイルからインポートされた数式を再計算するだけでなく、Aspose.Cellsは数式の結果を直接計算することもサポートしています。 時には、ワークシートに実際に追加せずに数式の結果を直接計算する必要があります。数式で使用されるセルの値はすでにワークシートに存在し、Ms-Excelの数式に基づいてこれらの値の結果を見つける必要がある場合、Aspose.CellsのFormula Calculation Engine APIであるworksheet.Calculate(string formula)を使用できます。

サンプルコードのダウンロード

 //Create a workbook

Workbook workbook = new Workbook();

//Access first worksheet

Worksheet worksheet = workbook.Worksheets[0];

//Put 20 in cell A1

Cell cellA1 = worksheet.Cells["A1"];

cellA1.PutValue(20);

//Put 30 in cell A2

Cell cellA2 = worksheet.Cells["A2"];

cellA2.PutValue(30);

//Calculate the Sum of A1 and A2

var results = worksheet.CalculateFormula("=Sum(A1:A2)");

Cell cellA3 = worksheet.Cells["A3"];

cellA3.PutValue(results);

//Print the output

Debug.WriteLine("Value of A1: " + cellA1.StringValue);

Debug.WriteLine("Value of A2: " + cellA2.StringValue);

Debug.WriteLine("Result of Sum(A1:A2): " + results.ToString());

workbook.Save("Calulate Any Formulae.xls");

サンプルコードをダウンロード