如何实现sum空值时显示也为空
需求背景
润乾报表提供的单元格sum函数能方便地求得报表各个单元格的和,由于sum函数属于数学函数,结果必然也是数值,所以sum空值的结果是0.0。
最近有的客户提出这样的需求:当要求和的单元格都为空时,显示空;当只有空和0时,显示0;当存在正常的数字时,得到相应的和。对于这个需求本文中给出如下两种实现方法。
实现方法
通过JS实现
首先看一下报表,见下图。其中C3是我们要显示”乡村人口”的总和,即需求提到的效果。C1用于js中读取乡村人口字段所有值,设置为不可扩展。
在发布该报表的jsp中增加如下js代码
<script language=“javascript”>
var value = document.getElementById(“report1_C1″).innerText;
var arr_people = value.split(“,”);
var flag1 = 0; //null标识位
var flag2 = 0; //0标识位
var sumValue = 0;
for(var i=0;i<arr_people.length;i++){
if(arr_people[i]==‘null’){
flag1=1; //当有值为null时,空标识位为1
//alert(“flag1=”+flag1);
}else if(arr_people[i]==’0′){
flag2=1; //当有值为0时,0标识位为1
}else{
flag1=2; //出现非0非null时,空标志位为2
flag2=2; //出现非0非null时,0标识位为2
break; //出现非0非null时,退出循环
}
}
for(var i=0;i<arr_people.length;i++){
if(arr_people[i]!=‘null’){
sumValue+=parseFloat(arr_people[i]); //求非空数据和
}
}
if(flag1==1 && flag2==0){//全部为null时
document.getElementById(“report1_C3″).innerHTML=”;
}else if(flag1!=2 && flag2==1){//全部为空或0时
document.getElementById(“report1_C3″).innerHTML=’0′;
}else{//存在数字时
document.getElementById(“report1_C3″).innerHTML=sumValue;
}
</script>
此实现方式比较固定,所以如果要显示的单元格比较多时,比较麻烦。好处是在程序中处理业务会比报表更灵活。
通过报表表达式实现
在C3单元格的显示值表达式中写入:if(ds1.count(乡村人口==null)==ds1.count(),”",value())
此方法实现简单,适合大量单元格使用,缺点就是没有程序处理灵活。