Spread Studio for .NET使用教程:創(chuàng)建自定義函數(shù)
如果需要定期使用一個非內置函數(shù)或者是將多個內置函數(shù)合并成一個獨立的函數(shù),那么你可以定義自己的自定義函數(shù)。這些自定義函數(shù)可以用來調用任意內置函數(shù)。
一個自定義函數(shù)的名稱可以和內置函數(shù)相同。自定義函數(shù)優(yōu)先級別高于內置函數(shù)。自定義函數(shù)是動態(tài)鏈接的。因此,應用程序可以重新定義現(xiàn)有的自定義函數(shù)。
使用代碼:
1、 定義自定義函數(shù)。
2、 在表格中注冊函數(shù)。
3、 使用自定義函數(shù)。
示例:創(chuàng)建、注冊、使用三個自定義函數(shù)
第一步是創(chuàng)建一個自定義函數(shù)。在這個例子中,我們創(chuàng)建三個自定義函數(shù):一個立方體的數(shù)學函數(shù),一個XOR邏輯函數(shù),和一個空字符串函數(shù)。下面是具體的實現(xiàn)代碼。
CUBE定制函數(shù)是用來計算數(shù)字的三次方。即,CUBE(x)相當于POWER(x,3)。
C#
public class CubeFunctionInfo : 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 = CalcConvert.ToDouble(args[0]); return num * num * num; } }
XOR自定義函數(shù)執(zhí)行兩個布爾值的專用OR運行。這是類似于C語言的 "^"操作或者是VB中的XOR操作。
C#
public class XorFunctionInfo : 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 = CalcConvert.ToBool(args[0]); bool arg1 = CalcConvert.ToBool(args[1]); return (arg0 || arg1) && (arg0 != arg1); } }
NULL函數(shù)返回恒量值NULL。(類似于FALSE()函數(shù)返回恒量值false)。
C#
public class NullFunctionInfo : 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; } }
第二步是使用下面的代碼片段注冊自定義函數(shù)。
C#
FpSpread1.ActiveSheetView.AddCustomFunction(new CubeFunctionInfo()); FpSpread1.ActiveSheetView.AddCustomFunction(new XorFunctionInfo()); FpSpread1.ActiveSheetView.AddCustomFunction(new NullFunctionInfo());
第三步是在公式中使用自定義函數(shù),如下面的代碼所示。
C#
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)");