表达式中的运算符冲突

在Word报表模版中,"<"和">"有特殊意义,分别用于标记表达式 的开始和结束,例如:

<CUDATE([出生日期])>

但是在表达式中,"<"和">"本身也是一个运算符,分别表示大于和小于,当然还有表示不等于的"<>"。

为了避免冲突,Foxtable要求:

1、作为运算符的"<"、">"和"<>",前后必须有空格。
2、用于表达式开始标记的"<",后面不能有空格;作为表达式结束标记的">",前面不能有空格。

下面列出一些表达式,有的正确,有的错误,请大家体会:

表达式 说明

<IIF([成绩] > 60, "及格","不及格")>

正确的表达式
<IIF([出生日期] <> #0:00#, CUDATE([出生日期]), "")> 正确的表达式
<IIF([成绩] >60, "及格","不及格")> 错误的表达式,运算符>的后面没有空格。
<IIF([成绩]> 60, "及格","不及格")> 错误的表达式,运算符>的前面没有空格。
<IIF([等级]<>"A", "录取","淘汰")> 错误表达式,运算符<>的前后都没有空格。
< IIF([成绩]> 60, "及格","不及格")> 错误表达式,开始标记<的后面有空格。
<IIF([成绩]> 60, "及格","不及格") > 错误表达式,结束标记>的前面有空格

需要特别注意的是,一个表达式编写错误,可能会导致后续其它表达式也无法正确计算。

例如假定模版中有连续的两个表达式:

是否及格:<IIF([成绩] > 60, "及格","不及格") >
是否录取:<IIF([
等级] <> "A", "录取","淘汰
")>

看起来只是第一个表达式有错,实际上两个表达式都无法计算,因为系统在分析模版的时候,由于第一个表达式的结尾标记">"的前面有空格,所以会继续往后查找,一直找到第一个符合要求的 结尾标记(也就是第二个表达式的结尾标记),这样生成的时候,Foxtable会将两个表达式合并为一个,当然这个合并后的表达式完全不符合语法要求,自然也就无法计算 ,最终的结果就是两个表达式都没有结算,尽管其中一个表达式并没有错误。

所以在分析表达式错误的时候,应该从第一个没有正确计算的表达式开始分析,逐个往后处理。


本页地址:http://www.foxtable.com/webhelp/topics/2921.htm