// CUBEカスタム関数は、数値を3乗します。 つまり、CUBE(x) は POWER(x,3) と同じ意味です。
[Serializable()]
public class CubeFunctionInfo : FarPoint.CalcEngine.FunctionInfo
{
public override string Name { get { return "CUBE"; } }
public override int MinArgs { get { return 1; } }
public override int MaxArgs { get { return 1; } }
public override object Evaluate(object[] args)
{
double num = FarPoint.CalcEngine.CalcConvert.ToDouble(args[0]);
return num * num * num;
}
}
// XORカスタム関数は、2つのブール値に対し、排他的論理和演算を実行します。
[Serializable()]
public class XorFunctionInfo : FarPoint.CalcEngine.FunctionInfo
{
public override string Name { get { return "XOR"; } }
public override int MinArgs { get { return 2; } }
public override int MaxArgs { get { return 2; } }
public override object Evaluate(object[] args)
{
bool arg0 = FarPoint.CalcEngine.CalcConvert.ToBool(args[0]);
bool arg1 = FarPoint.CalcEngine.CalcConvert.ToBool(args[1]);
return (arg0 || arg1) && (arg0 != arg1);
}
}
// NULLカスタム関数は定数値 null を返します。
[Serializable()]
public class NullFunctionInfo : FarPoint.CalcEngine.FunctionInfo
{
public override string Name { get { return "NULL"; } }
public override int MinArgs { get { return 0; } }
public override int MaxArgs { get { return 0; } }
public override object Evaluate(object[] args)
{
return null;
}
}
protected void Page_Load(object sender, System.EventArgs e)
{
if (IsPostBack) return;
FpSpread1.ActiveSheetView.ColumnCount = 5;
FpSpread1.ActiveSheetView.RowCount = 5;
// 3つのカスタム関数を登録します。
FarPoint.Web.Spread.Model.DefaultSheetDataModel dataModel = new FarPoint.Web.Spread.Model.DefaultSheetDataModel();
dataModel.AddCustomFunction(new CubeFunctionInfo());
dataModel.AddCustomFunction(new XorFunctionInfo());
dataModel.AddCustomFunction(new NullFunctionInfo());
// シートにデータモデルを設定します。
FpSpread1.ActiveSheetView.DataModel = dataModel;
// セルに数式を設定します。
FpSpread1.ActiveSheetView.SetFormula(0, 0, "CUBE(5)");
FpSpread1.ActiveSheetView.SetFormula(1, 0, "XOR(FALSE,FALSE)");
FpSpread1.ActiveSheetView.SetFormula(1, 1, "XOR(TRUE,FALSE)");
FpSpread1.ActiveSheetView.SetFormula(1, 2, "XOR(FALSE,TRUE)");
FpSpread1.ActiveSheetView.SetFormula(1, 3, "XOR(TRUE,TRUE)");
FpSpread1.ActiveSheetView.SetFormula(2, 0, "CHOOSE(1,100,NULL(),300)");
FpSpread1.ActiveSheetView.SetFormula(2, 1, "CHOOSE(2,100,NULL(),300)");
FpSpread1.ActiveSheetView.SetFormula(2, 2, "CHOOSE(3,100,NULL(),300)");
}
' CUBEカスタム関数は、数値を3乗します。 つまり、CUBE(x) は POWER(x,3) と同じ意味です。
<Serializable()> _
Public Class CubeFunctionInfo
Inherits FarPoint.CalcEngine.FunctionInfo
Public Overrides ReadOnly Property Name As String
Get
Return "CUBE"
End Get
End Property
Public Overrides ReadOnly Property MinArgs As Integer
Get
Return 1
End Get
End Property
Public Overrides ReadOnly Property MaxArgs As Integer
Get
Return 1
End Get
End Property
Public Overrides Function Evaluate(args() As Object) As Object
Dim num As Double = FarPoint.CalcEngine.CalcConvert.ToDouble(args(0))
Return num * num * num
End Function
End Class
' XORカスタム関数は、2つのブール値に対し、排他的論理和演算を実行します。
<Serializable()> _
Public Class XorFunctionInfo
Inherits FarPoint.CalcEngine.FunctionInfo
Public Overrides ReadOnly Property Name As String
Get
Return "XOR"
End Get
End Property
Public Overrides ReadOnly Property MinArgs As Integer
Get
Return 2
End Get
End Property
Public Overrides ReadOnly Property MaxArgs As Integer
Get
Return 2
End Get
End Property
Public Overrides Function Evaluate(args() As Object) As Object
Dim arg0 As Boolean = FarPoint.CalcEngine.CalcConvert.ToBool(args(0))
Dim arg1 As Boolean = FarPoint.CalcEngine.CalcConvert.ToBool(args(1))
Return (arg0 OrElse arg1) AndAlso (arg0 <> arg1)
End Function
End Class
' NULLカスタム関数は定数値 null を返します。
<Serializable()> _
Public Class NullFunctionInfo
Inherits FarPoint.CalcEngine.FunctionInfo
Public Overrides ReadOnly Property Name As String
Get
Return "NULL"
End Get
End Property
Public Overrides ReadOnly Property MinArgs As Integer
Get
Return 0
End Get
End Property
Public Overrides ReadOnly Property MaxArgs As Integer
Get
Return 0
End Get
End Property
Public Overrides Function Evaluate(args() As Object) As Object
Return Nothing
End Function
End Class
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If IsPostBack Then
Return
End If
FpSpread1.ActiveSheetView.ColumnCount = 5
FpSpread1.ActiveSheetView.RowCount = 5
' 3つのカスタム関数を登録します。
Dim dataModel As New FarPoint.Web.Spread.Model.DefaultSheetDataModel()
dataModel.AddCustomFunction(New CubeFunctionInfo())
dataModel.AddCustomFunction(New XorFunctionInfo())
dataModel.AddCustomFunction(New NullFunctionInfo())
' シートにデータモデルを設定します。
FpSpread1.ActiveSheetView.DataModel = dataModel
' セルに数式を設定します。
FpSpread1.ActiveSheetView.SetFormula(0, 0, "CUBE(5)")
FpSpread1.ActiveSheetView.SetFormula(1, 0, "XOR(FALSE,FALSE)")
FpSpread1.ActiveSheetView.SetFormula(1, 1, "XOR(TRUE,FALSE)")
FpSpread1.ActiveSheetView.SetFormula(1, 2, "XOR(FALSE,TRUE)")
FpSpread1.ActiveSheetView.SetFormula(1, 3, "XOR(TRUE,TRUE)")
FpSpread1.ActiveSheetView.SetFormula(2, 0, "CHOOSE(1,100,NULL(),300)")
FpSpread1.ActiveSheetView.SetFormula(2, 1, "CHOOSE(2,100,NULL(),300)")
FpSpread1.ActiveSheetView.SetFormula(2, 2, "CHOOSE(3,100,NULL(),300)")
End Sub