在执行某个函数的时候,往往需要对于其中的常量用表达式来替代,从而使结果达到“动态效果”。这样就存在了一个函数嵌套问题,而得不到我们需要的正确结果。这时候,解决方法有二个。一、用一个变量来替代这个“表达式”;二、使用Eval来执行这个带“表达式”的函数。前者使用“变量来替代”的方法可以解决大部分问题,但有时可能仍然得不到结果。所以在这里举几个“使用Eval来执行函数”的例子供大家参考。
1、精确计算二个日期之间的天数。
DAYSBTW($"2013-2-1",$"2013-3-1") = 28
-----------------------------------------
如果二个日期为表达式取得,就可以使用Eval执行否则无结果:
例如:Eval("DaysBtw($"""+Text(FindText(GridName,"日期","名称","=",[名称],1))+""",$"""+Text(FindText(GridName,"日期","名称","=",[名称],2))+""")")
*注意:其中因为是日期型,所以必须用Text()转换为字符型。
======================================================================
2、返回多个“字符串”中的第几个“字符串”。
Split("中国|广东|湛江","|",2) = "广东"
------------------------------------------
如果多个“字符串”来自表达式,就可以使用Eval执行否则无结果:
例如:Eval("Split("""+ListCols("表1")+""",""|"",2)")
======================================================================
3、在当前表增加一行,对某些列进行赋值。
AddRow(GridName,"第一列,第二列,第三列",1000,0.85,500)
------------------------------------------
进行赋值时(常量字符、数值都没有问题)
a、如果是字符型表达式:
Eval("AddRow(GridName,""第一列,第二列,第三列"","""+Cell(7,"第一列")+""","""+Cell(7,"第二列")+""","""+Cell(7,"第三列")+""")")
b、如果是数值或者日期型表达式:(必须用Text()转换为字符型)
Eval("AddRow(GridName,""第一列,第二列,第三列"","+Text(Cell(7,"第一列"))+","+Text(Cell(7,"第二列"))+","+Text(Cell(7,"第三列"))+")")
======================================================================