这段一直在做“润乾报表”的相关事宜。
这玩意儿没有用过,现在正在一边看文档一边动手干。有以前的老同事摸索了一些经验,内部消失成录制好的AVI的视频了。现在也在看。Google不出来更多有关“润乾”的资料了。只得自己摸索。现在记录下来在“过河”过程中摸到的解决或未解决的“石头”。
软件环境如下:润乾设计器4.0,Oracle 9i,Windows Advance Server 2000,JDK
1.6.02
一、 对表中一列设置单元格格式时,如果查询出该列的值中有空值存在,就会报空指针异常,但如果使用“if(value()==null,’’)”把空值(null)转为空串的话,其在单元格里设置的显示格式对于有数据的行就不会生效,仍以默认格式输出。
准备知识:
一、 if()
函数说明:
根据布尔表达式的不同计算结果,返回不同的值。本函数从左到右计算,先出现的布尔表达式先算,如果出现为true的表达式,则返回相应的结果,后面的不再计算。如果没有一个布尔表达式为true,而且有缺省值表达式,则返回缺省值,否则返回null。
语法:
if(boolExp1,valueExp1{,boolExp2,valueExp2 {,boolExp3,valueExp3 {, {defaultExp}}}})
参数说明:
boolExp(n) 布尔表达式,如果结果为真,则返回对应的值表达式计算结果
valueExp(n) 值表达式,和布尔表达式一一对应
defaultExp 缺省值表达式,如果所有布尔表达式结果都为假,则返回本表达式计算结果
返回值:
数据类型不定,由valueExp(n)的运算结果决定。
示例:
例1:if(value()>100,-65536,value()<=100 and value()>80,-16776961,-14336 )
表示当前格的值大于100时,返回-65536颜色值,当前格的值小于等于100且大于80时,返回-16776961颜色值,否则返回-14336颜色值
二、 value()
函数说明:
取得当前单元格的值
语法:
value()
返回值:
当前单元格的值
三、 dateTime()
函数说明:
将字符串或长整数转换成日期时间
语法:
dateTime(string)
dateTime(long)
参数说明:
string 格式为yyyy-MM-dd HH:mm:ss的字符串
long 以微秒计的长整数
返回值:
日期时间
示例:
例1:dateTime("2006-01-01 10:20:30") 返回:2006-01-01 10:20:30
例2:dateTime("2006-01-01 10:20:30:111") 返回:2006-01-01 10:20:30
例3:dateTime(12345) 返回:1970-01-01 08:00:12
问题原因:
如果在该单元格里设置了对null值的解决判断语句后,系统会把符合判断的值进行设定,即设定成“value()==null,”后值的,而不满足条的值(即value()不为null)的值直接进行输出。并不遵循在单元格里设置的格式。
解决方法:
基本思想是把为null和不为null两种情况的值统一输出,都使用润乾提供的内部函数进行处理。这样就可以看成是统一下格式。如果对单元格设置的格式对其中之一生效,那么另一种情况的输出也同样生效。其中用的三个内置函数if(),value()和dateTime()。最终拼出的判断语句如下:
if(value()==null,’’,value()!=null,dateTime(ds3.birthday))
注:当value()等于null时,用’’空串代表,如果value()不等于null时,将查询出来的日期型变量进行一次转换,这次转换其实只是强调一下转换为默认日期格式,不使用dateTime()应该也是可以的。但个人认为使用一下,可以保证数据在最大可能性下的正确。
二、 按照“润乾”所提供的手册中所讲例子,不能在报表的“行属性”中设置“报表尾”,会提示“行类型排列不正确”的错误。从手册里没有找到有关“行属性”中那堆行类型排序的说明。到 2007 年 10 月 9 日下午 15 时 16 分前 没有解决。这个不是急活,待有空再来解决。