如何运用Cell的自定义函数功能

本文介绍了Cell组件的自定义函数功能,允许开发者根据需求定义非内置函数,以提高软件的灵活性和用户交互性。自定义函数的工作原理是开发者在程序中定义函数,当用户使用时,Cell触发计算事件并执行相应的算法。添加自定义函数涉及函数大类、函数体和帮助。文章通过VB语法示例详细解释了如何定义和添加自定义函数,以及如何编写算法实现功能。最后,文中阐述了如何在Cell中使用自定义函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为帮助软件开发商缩短开发周期和最终用户的方便使用,Cell组件/插件内置了很多函数,包括数学函数、统计函数、字符串函数,财务函数等,在单元格中设置函数具有减少数据重复计算、加快运算速度、增强与最终用户的交互性,减少程序员工作量,缩短软件开发周期等特点。但每个最终用户的需求都有所不同,仅使用Cell内置函数是远远不够的。为此Cell控件在函数功能上增加了自定义函数功能,以便让软件开发商开发出更灵活,更具有行业特性,更适合最终用户的软件。

    自定义函数是指软件开发商根据自己的需要定义一些非Cell内置函数的函数,自定义函数需要定义的内容包括函数名,参数,返回值,并且要求软件开发商为函数编写相应的算法。最终用户在使用此自定义函数时,Cell控件会根据函数的相关设置计算出相应的结果。

    Cell内置函数的使用十分简单,这里将不做说明,下面将主要介绍Cell中自定义函数的工作原理以及如何添加自定义函数和为其编写算法。

一、自定义函数工作原理

 

    软件开发商先在程序中定义自定义函数,最终用户在使用此函数时,Cell触发自定义函数计算事件,软件开发商在Cell触发的事件中,根据事件传入相关信息,编写函数的功能,并将结果传给Cell控件,最后Cell将结果展现在控件上,这样Cell的整个自定义函数工作过程结束。

二、添加自定义函数

    自定义函数的定义包括三部分,1。函数大类;2。函数体;3。帮助;

函数大类  表示函数的所属类别,用于最终用户在使用时快速方便查找到相应的函数;

函数体  是自定义函数最关键的部分,是用户编写函数功能和最终用户使用函数的前提,它分为三部分,返回值,函数名,参数;

返回值  Cell为自定义函数提供数值、字符串以及未定义类型两种类型的返值,用户根据需要设置;未定义类型是指返回值可能是字符串或数值类型,为了减少CELL的运算速度,华表不建议用户使用该类型;

函数名  即是自定义函数的名称,最多不能超过64个字符,函数名称可以使用中文表示;

参数   即供最终用户在调用自定义函数时的输入的各项数据,它包括字符串和数值两种类型;字符串类型参数又分三种类型,String类型,Cell类型(单元格类型),RNAGE类型(区域类型),String类型返回普通的字符串,Cell类型返回“col,row,sheet”形式的字符串,RNAGE类型返回“col1,row1,col2,row2,sheet”形式的字符串,后面两种用户需要自行解析才能得到相应的行、列、表页值;各个参数用“,”号分隔开,每个参数必须按照 “数据类型  参数名” 的格式定义,例如定义一字符串类型参数, String  str,定义数值类型  Double num;一个自定义函数最多可使用16个参数;自定义函数参数允许用户设置缺省参数,缺省参数表示最终用户在使用函数时,可对此参数输入数据,也可不用输入数据,缺省参数用在普通参数前后加“[” 和“] ”号表示,例如,[String str]表示;

帮助 用户在公式输入栏选取公式时,显示公式的说明,用于帮助最终用户快速理解和使用公式;帮助的内容必有写在“BEGIN­_HELP”和“END_HELP”之间;帮助内容建议用户书写有关函数的功能,返回值以及各个参数的说明,如果内容中有多行文本需要换行,则应在内容中加上回车换行符节;

    现以实例讲解定义自定义函数(VB语法):

  Private Sub Form_Load()

Dim strFun As String

strFun = """我的自定义函数"" double GetValueFromDB(String sFieldName1,[String sTableName],[String sFieldName2])"

strFun = strFun & vbCrLf & "BEGIN_HELP"

strFun = strFun & vbCrLf & "double GetValueFromDB(String sFieldName1,[String sTableName],[String sFieldName2])"

strFun = strFun & vbCrLf & "该函数返回数值类型,用于从数据库某个表中根据sFieldName1字段名,取得sFieldName2字段中的值;"

strFun = strFun & vbCrLf & "注:sFieldName1 为必填字段,sTableName 和 sFieldName2为可填字段,"

strFun = strFun & vbCrLf & "如果用户不填写则默认是sTableName=table1,sFieldName2=lValue;sFieldName1参数和sFieldName2参数所表示的字段必须是在同一数据库同一个表中的字段"

strFun = strFun & vbCrLf & "END_HELP"

Cell1.DefineFunctions strFun ‘将自定义函数添加至CELL中

End Sub

    例子中添加“我的自定义函数”大类,并将GetValueFromDB归类至我的自定义函数中,GetValueFromDB中创建了三个参数,String  sFieldName1是普通参数,[String sTableName]和[String sFieldName2] 是缺省参数,在帮助中对自定义数做了详细的说明,包括返回值,各参数的意义,缺省值,功能等等. DefineFunctions方法则将当前自定义函数的字符串添加至CELL中,在单元格中输入”=”号,会出现公式输入栏,点击问号,在函数大类列表中即能发现刚添加的”我的自定义函数”大类,如图1

 

图1

      点击”我的自定义函数”大类,列出刚添加的函数”GetValueFromDB”,在其右边则列出帮助的内容,即对函数的注释,如下图

 

图2

    至此,一个自定义函数的定义已经完成。但此时函数还没有完成,达不到预想的结果,还需要为其编写相应的算法。

三、编写相应算法(运算过程利用自定函数读取数据库数据(补充))

    自定义函数定义完成后,用户在公式输入栏调用自定义,CELL将触发CalcFunc 事件或CalcFuncEx事件,这两个事件不能同时应用在同一个CELL实例中。用户添加CalcFunc事件,并在该事件中处理即可.CalcFunc包括三个参数,name(字符串类型),rettype(长整型),paranum(长整型);name表示当前最终用户在地址栏调用的自定义函数名称,rettype表示自定义函数返回值的类型,0表示数值类型,1表示字符串类型;paranum表示自定义函数所包含参数的个数(包括缺省参数);CalcFuncEx事件有五个参数,它比CalcFunc事件多两个参数,col参数和row参数,它们都是长整型,分别代表当前计算的自定义函数所在的列号和行号,其它三个参数与CalcFunc事件相同。下面的将以CalcFunc事件为例,为先前定义的自定义函数编写相应的功能:

          '接收参数的变量

          Dim strFieldName1 As String, strTableName As String, strFieldName2 As String

          Dim nIsDef As Long '传递至取得参数值的方法中

          Dim ret As Single  '返回值

         

          strFieldName1 = Cell1.GetFuncStringPara(0, nIsDef) '取得第一个参数值

          strTableName = Cell1.GetFuncStringPara(1, nIsDef) '取得第二个参数值

          strFieldName2 = Cell1.GetFuncStringPara(2, nIsDef) '取得第三个参数值

         

          If strTableName = "" Then  '如果用户没输入,则用缺省值 "table"

             strTableName = "table1"

          End If

         

          If strFieldName2 = "" Then  '如果用户没输入,则用缺省值 "lvalue"

             strFieldName2 = "lvalue"

          End If

          '从数据库中取得数据

          ret = GetDBValue(strFieldName1, strTableName, strFieldName2)

     '将结果设回至CELL控件上

          Cell1.SetFuncResult ret, "", rettype

          Cell1.ReDraw '刷新CELL控件

    GetFuncStringPara方法取得字符串类型参数的值,它包括两个参数,index和isDefault,它们都是地址类型的参数,index表示参数在函数的顺序,它从0开始表示,例如上述例子中,strTableName 的index就是1;isDefault表示指定参数是缺省参数还是普通参数,由GetFuncStringPara返回,0表示普通参数,1表示缺省参数;如果参数是数值类型则用GetFuncDoublePara 方法取得,它与GetFuncStringPara的用法一致,只是它的返回值不一样,GetFuncDoublePara返回数值型。

   取得最终用户输入的参数值,程序根据参数值返回相应的结果,示例程序中通过GetDBValue函数取得计算结果.再用SetFuncResult方法将函数结果返回给CELL控件,SetFuncResult 方法包含floatvalue,strvalue,type三个参数,floatvalue参数是Double类型,用于指定自定义函数数值类型的返回值;strvalue参数是字符串类型,用于指定自义函数字符串类型的返回值;type参数是长整型,用于指定自定义函数的返回值类型;如果type值是0表示自定义函数返回值是数值类型,无论strvalue的值是多少,都将floatvalue的值传至CELL中;相反,type值是1表示返回值是字符串,CELL只将strvalue的值传至CELL中。

   在Cell1.SetFuncResult 语句后加了Cell1.ReDraw方法,此语句用于在结束自定义函数计算后,刷新CELL控件,防止出现乱屏。

四、使用自定义函数

  以示例程序为例,运行示例程序后,在任意一单元格键入“=”号,会出现公式输入栏;在公式栏中点击问号,如图3                  

图3

    点击问号后,会列出所有已经存在至CELL中所有的函数大类,包括自定义函数,如图1;选取“我的自定义函数”一类后,即可看到它所包含的所有函数,如图2;将GetValueFromDB函数选进地址栏后,在括号中输入带括号的“001”,回车即可将数据库中的值取出。如果最终用户对自定义函数名,参数类型,参数个数等输入有误的话,CELL会自动校验,直到最终用户输入正确为止,CELL才自定义函数计算事件触发,所以用户在开发程序时不用担心非法的自定义函数。执行结果如图4.

 

如图4

 

点击下载示例代码:Sampl如何运用Cell的自定义函数功能es.rar

 

http://www.cellsoft.cc/Cell/News_Show.asp?id=649&lx=Cell%BC%BC%CA%F5%CE%C4%D5%C2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值