表达式中的运算符冲突
在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会将两个表达式合并为一个,当然这个合并后的表达式完全不符合语法要求,自然也就无法计算 ,最终的结果就是两个表达式都没有结算,尽管其中一个表达式并没有错误。
所以在分析表达式错误的时候,应该从第一个没有正确计算的表达式开始分析,逐个往后处理。