GrapeCity SPREAD for WPF 2.0J > 開発者ガイド > 数式 > カスタム関数 |
製品では 448 種類の組み込み関数を提供しています。しかし、必要な計算や処理がこれらの組込み関数に存在しない場合、カスタム関数を作成できます。カスタム関数は、組込み関数と同様に使用できます。カスタム関数は次の手順で作成します。
プロジェクトの参照設定に GrapeCity.Wpf.CalcEngine.dll が追加されている必要があります。製品が提供するアセンブリについては「アセンブリ」を参照してください。
CalcFunction クラスを継承するクラスを作成し Evaluate メソッドをオーバーライドします。Evaluate メソッドに、カスタム関数の処理を実装します。また、MaxArgs および MinArgs プロパティをオーバーライドし、カスタム関数が受け取る引数の最大数、および最小数を設定します。これにより、設定を超える、または設定に満たない数の引数で関数が呼び出された場合、セルに「#VALUE!」エラーが表示されます。
次のサンプルコードは、2つの引数を受け取り積算するカスタム関数 KAKERU を作成します。
サンプルコードC# |
コードのコピー |
---|---|
public class MyKakeruFunction : GrapeCity.CalcEngine.Functions.CalcFunction { //関数の処理 public override object Evaluate(object[] args) { double x = double.Parse(args[0].ToString()); double y = double.Parse(args[1].ToString()); return x * y; } //引数の最大数 public override int MaxArgs { get { return 2; } } //引数の最小数 public override int MinArgs { get { return 2; } } //関数の名称 public override string Name { get { return "KAKERU"; } } } |
Visual Basic |
コードのコピー |
---|---|
Public Class MyKakeruFunction Inherits GrapeCity.CalcEngine.Functions.CalcFunction '関数の処理 Public Overrides Function Evaluate(args As Object()) As Object Dim x As Double = Double.Parse(args(0).ToString()) Dim y As Double = Double.Parse(args(1).ToString()) Return x * y End Function '引数の最大個数 Public Overrides ReadOnly Property MaxArgs() As Integer Get Return 2 End Get End Property '引数の最小個数 Public Overrides ReadOnly Property MinArgs() As Integer Get Return 2 End Get End Property '関数の名称 Public Overrides ReadOnly Property Name() As String Get Return "KAKERU" End Get End Property End Class |
組込み関数の名称は予約されています。カスタム関数に、組込み関数と同じ名前は使用できません。製品が提供する組込み関数について、詳しくは「関数リファレンス」を参照してください。 |
コントロールの AddCustomFunction メソッドで、作成したカスタム関数をコントロールに登録します。次のサンプルコードは、上のサンプルコードで作成した KAKERU 関数を登録します。
サンプルコードC# |
コードのコピー |
---|---|
gcSpreadGrid1.AddCustomFunction(new MyKakeruFunction()); |
Visual Basic |
コードのコピー |
---|---|
GcSpreadGrid1.AddCustomFunction(New MyKakeruFunction()) |
カスタム関数は、組み込み関数と同様に使用できます。次のサンプルコードは、上のサンプルコードで作成して登録した KAKERU 関数をコードから使用します。
サンプルコードC# |
コードのコピー |
---|---|
gcSpreadGrid1[0, 0].Formula = "KAKERU(1000,1.05)"; gcSpreadGrid1[0, 1].Value = 3; gcSpreadGrid1[1, 0].Formula = "KAKERU(A1,B1)"; |
Visual Basic |
コードのコピー |
---|---|
GcSpreadGrid1(0, 0).Formula = "KAKERU(1000,1.05)" GcSpreadGrid1(0, 1).Value = 3 GcSpreadGrid1(1, 0).Formula = "KAKERU(A1,B1)" |
また、ユーザーによる数式の編集が許可されていれば、組込み関数と同様に、ユーザーがカスタム関数を使用することもできます。ユーザーによる数式の編集を許可する方法については、「ユーザーによる数式の編集を許可」を参照してください。
Excel ファイルへの出力では、セルに設定されたカスタム関数は出力されますが、カスタム関数の定義は出力されません。そのため、カスタム関数が設定されたセルは「#NAME?」エラーとなります。「#NAME?」エラーを解決するには、出力された Excel ファイルを開き、カスタム関数と同じ名前のユーザー定義関数を作成する必要があります。