关于《报表》的实际运用案例

Posted 举林会天下

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于《报表》的实际运用案例相关的知识,希望对你有一定的参考价值。

问题:看下图,我需要在咸阳前加 【西安】 在西城和商洛之间加【合计】,并且把西城和西县的值累计到西安一栏;然后把除了西安这一栏之外的值都累加到合计一栏?想想怎么做?

说明:这些数据都是可以从后台读取过来的,在这里暂时不讨论如何实现这样的数据结构。

 经过一番功夫就是写代码啦,我们会看到如下的效果:

 代码稍后会有提点!!

 

            List<Group> dishiNames = new ArrayList<Group>();
          //Group是一个实体类,字段主要有name,id等		
          dishiNames = loginMonthReport.findCityName(groupId); // dishiNames={"咸阳","宝鸡","渭南市","铜川市","延安","榆林","汉中市","安康市","商洛","西城","西县"}; if(groupId == "2") { Group tempxian = new Group(); tempxian.setId("0828"); tempxian.setName("西安"); dishiNames.add(0, tempxian); // 将西安添加到List的第一个位置变成了dishiNames={"西安","咸阳","宝鸡","渭南市","铜川市","延安","榆林","汉中市","安康市","商洛","西城","西县"}; }
          //添加合计名称 Group tempgroup = new Group(); tempgroup.setId("1994"); tempgroup.setName("合计"); if(dishiNames.size() < 2) { dishiNames.add(tempgroup); //当dishiNames大小小于2时,直接在后面添加就行 } else { dishiNames.add(dishiNames.size() - 2, tempgroup); //当dishiNames大于2,将合计添加到倒数第3个位置. }

 光添加名称还不行,没有添加数据,使出来这样的效果的:

请看这点代码:

说说思路:不关联数据库的话,我们只用来测试,那么我们就让所有的数据都为0,把每一行都看作一个list集合,然后整体是一个大的List集合,在用el进行遍历即可。这里我只说说合计和西安两栏数据的实现:

    List<List<Integer>> lsts = new ArrayList<List<Integer>>();   //最大的 List
    lsts=[{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},]; //{0,0,0......}表示每一行数据

        //此处将合计值放入lsts的倒数第二个位置 List<Integer> heji = new ArrayList<Integer>(); /*for(int i = 0; i < 32; i++) { heji.add(0); }*/
          //竖着相加 for(int k = 0; k < 32; k++) { int sum = 0; for(int i = 0; i < lsts.size(); i++) { for(int j = k; j < lsts.get(i).size(); j++) { sum = sum + lsts.get(i).get(j);//实现了每一行list中的数据一一对应的相加,和放在sum中,
                                                                  //比如说:{0,0,0......}
                                                                       {1,0,0......},竖着相加 0+1=1 break;//然后跳出,继续下一列的数据相加 } } heji.add(sum);//把一列的数据和放在heji中 } if(lsts.size() < 3) { lsts.add(lsts.size(), heji); //lsts中没有超过3个的,将合计数据直接加在后面即可。 } else { lsts.add(lsts.size() - 2, heji); //lsts中有超过3个的,将合计数据放在倒数第三个位置。 }

 然后再看看西安一栏数据如何添加:

        //将西城和西县的数据和累计放在西安下
		List<Integer> xianheji = new ArrayList<Integer>();
			
		for(int m = 0; m < 32; m++) {
			int sum = 0;
			for(int n = lsts.size() - 1; n >= lsts.size() - 2; --n) { //此处要找到最后两行数据,然后实现累加,跟上面的实现类似。
				for(int x = m; x < lsts.get(n).size(); x++) {
					sum = sum + lsts.get(n).get(x);//103
					break;
				}
			}
			xianheji.add(sum);
		}
		lsts.add(0, xianheji);
			

 总计一栏我就不说了,横着加,很简单。最终效果类似下图:

 这个是我在真实项目中做的报表。代码不敢全贴,只能作为参考。感兴趣的试一试,有问题不董或者想交流的,请留言,看到会回复的。

以上是关于关于《报表》的实际运用案例的主要内容,如果未能解决你的问题,请参考以下文章

关于Web报表FineReport打印的开发应用案例

流式布局案例——京东网页

在案例演示中嵌入片段

关于在ThinkPHP中运用setInc和setDec两个函数

现实中的容器技术运用案例

关于guithub