フォーミュラや関数を使用してデータを処理する

フォーミュラと関数を使用する

Aspose.Cells は Microsoft Excel ファイルを表す Workbook クラスを提供します。Workbook クラスは Excel ファイル内の各ワークシートにアクセスを可能にする Worksheets コレクションを含みます。ワークシートは Worksheet クラスで表されます。Worksheet クラスは Cells コレクションを提供します。Cells コレクションの各アイテムは Cell クラスのオブジェクトを表します。

Cell クラスが提供するプロパティやメソッドを使用してセルにフォーミュラを適用することができます。詳細は以下で議論されます。

組み込み関数の使用

組み込みの関数または数式は、開発者の努力と時間を削減するために準備された関数です。組み込みの関数の一覧をご覧ください。 関数はアルファベット順にリストされています。将来的にはさらに多くの関数がサポートされます。

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

セルに数式を追加するには、CellクラスのFormulaプロパティを使用します。たとえば、複雑な数式

 = H7*(1+IF(P7 = $L$3,$M$3, (IF(P7=$L$4,$M$4,0))))

、Aspose.Cellsでは複雑な数式もサポートされています。セルに数式を適用する際は、常に文字列を等号(=)で始めてマイクロソフトExcelで数式を作成するときと同様に関数パラメータを区切るためにコンマ(,)を使用してください。

以下の例では、ワークシートのCellsコレクションの最初のセルに複雑な数式が適用されています。この数式では、Aspose.Cellsで提供される組み込みのIF関数が使用されています。

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// Setting a complex formula on the 1st cell of the Cells collection of a worksheet
worksheet.getCells().get(0).setFormula("=H7*(1+IF(P7 =$L$3,$M$3, (IF(P7=$L$4,$M$4,0))))");

アドイン関数の使用

Excelアドインとして含めたいユーザー定義の数式があるかもしれません。Cell.Formula関数を設定すると組み込み関数は正常に動作しますが、アドイン関数を設定する必要があります。

Aspose.CellsはWorksheets.RegisterAddInFunction()を使用してアドイン関数を登録する機能を提供しています。その後、Cell.Formula = anyFunctionFromAddInとすると、出力されるExcelファイルにはアドイン関数からの計算された値が含まれます。

以下のサンプルコードでは、アドイン関数の登録を行います。同様に、「test_udf.xlsx」という出力ファイルをダウンロードして結果を確認することもできます。

TestUDF.xlam

test_udf.xlsx

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// Create empty workbook
Workbook workbook = new Workbook();
// Register macro enabled add-in along with the function name
int id = workbook.getWorksheets().registerAddInFunction(srcDir + "TESTUDF.xlam", "TEST_UDF", false);
// Register more functions in the file (if any)
workbook.getWorksheets().registerAddInFunction(id, "TEST_UDF1"); //in this way you can add more functions that are in the same file
// Access first worksheet
Worksheet worksheet = workbook.getWorksheets().get(0);
// Access first cell
Cell cell = worksheet.getCells().get("A1");
// Set formula name present in the add-in
cell.setFormula("=TEST_UDF()");
// Save workbook to output XLSX format.
workbook.save(outDir + "test_udf.xlsx", SaveFormat.XLSX);

配列数式の使用

配列数式は、数式を構成する関数への個々の数値の代わりに配列と連動する数式です。配列数式が表示されると、以下に示すように波括弧({})で囲まれています。

セルG2に配列数式を設定

todo:image_alt_text

いくつかのMicrosoft Excel関数は値の配列を返します。配列数式を使用して複数の結果を計算するには、配列を配列引数と同じ行数および列数のセル範囲に入力してください。

配列数式をセルに適用するには、CellクラスのsetArrayFormulaメソッドを呼び出すことができます。setArrayFormulaメソッドは次のパラメータを取ります。

  • 配列数式、配列数式。
  • 行数、配列数式の結果を設定する行数。
  • 列数、配列数式の結果を設定する列数。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// Setting an array formula on the cell "G2"
worksheet.getCells().get("G2").setArrayFormula("=LINEST(E2:E12,A2:D12,TRUE,TRUE)", 5, 3);

R1C1形式の数式の使用

R1C1参照スタイルの数式を、CellクラスのsetR1C1Formulaプロパティを使用してセルに適用します。

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// Setting an R1C1 formula on the "A1" cell
worksheet.getCells().get("A1").setR1C1Formula("=SUM(R[1]C[3]:R[3]C[4])");