最近,在用做报表,其中有一部分报表中需要合并行,其实用分组解决起来没什么难度.但是客户给的Excel就是那样的,没办法.百度.google,搜了一天,确实搜到了.有人已经实现了.还提供了代码.谢谢这位heis朋友了.下面是我实现一个小例子的效果图.数据是从数据库取出的动态数据.
左边是主报表,右边的是子报表


由于这测试时在一个商业的项目中,所以只把主要的代码贴出来.
我测试用的后台方法是一个Servlet,导出的是pdf.
1
//定义子报表的数据
2
Map parameters = new HashMap();
3
4
parameters.put("ReportTitle", "Address Report");
5
parameters.put("BaseDir", reportFile.getParentFile());
6
parameters.put("IsBgView", true);
7
8
//定义主报表的数据
9
List<Map> datas = new ArrayList();
10
11
Map temp = null;
12
List <Map>devices = null;
13
//这里去遍历rtu这个对象
14
for(WrRRtu rtu : wrtest.getAll())
{
15
devices=new ArrayList();
16
temp = new HashMap();
17
temp.put("recid", rtu.getRecid());
18
temp.put("rtumc", rtu.getRtumc());
19
temp.put("rtudm", rtu.getRtudm());
20
//这里给主报表添加数据
21
datas.add(temp);
22
//通过rtu去查它的子数据
23
for(WrRDevice dev :wrdtest.getWrRDeviceByRtuRecid(rtu.getRecid()))
{
24
temp = new HashMap();
25
devices.add(temp);
26
//当前rtu所有的子数据
27
temp.put("recid", dev.getRecid());
28
}
29
//把当前rtu的子数据放在parameters里
30
parameters.put(rtu.getRecid(), new JRListDataSource(devices));
31
}
32
//我这是到处PDF的
33
byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, new JRListDataSource(datas));
主报表中设置子报表的代码:
1
<subreport isUsingCache="true">
2
<reportElement key="subreport-1" x="181" y="0" width="285" height="22"/>
3
<dataSourceExpression><![CDATA[$P
{REPORT_PARAMETERS_MAP}.get($F
{recid})]]></dataSourceExpression>
4
<subreportExpression class="java.lang.String"><![CDATA[$P
{SUBREPORT_DIR} + "DepartmentList_department_person.jasper"]]></subreportExpression>
5
</subreport>
子报表中,仍旧按传统的方法取就OK了.
寧缺勿爛