JAVA开发一个合并单元格报表,纵向同值单元格的合并

纵向同值单元格的合并

客户要求:对报表的展现格式进行合并如:在报表展现后,要求把相邻值相同的单元格进行合并,这样看数据会更加直观一些,快逸报表支持合并单元格,但只是在报表复杂报表设计" target="_blank" class="quieeLink1">设计时在设计器中进行合并,或者说通过快逸的group函数来实现,但有些单元格要在计算后才能知道,

第一步:建立报表,如图一:

imgServlet?fileID=eed7f7c9-071f-4353-8a0e-87bd267b62cc

图一

第二步:Api合并单元格

报表展现时要求将最后一列值相同的单元格进行动态合并,下面介绍下该需求的实现方法。

快逸的iReport对象为报表计算后的结果对象,通过对该对象的灵活使用能很好实现该需求:

request.setCharacterEncoding( “GBK” );

//1、读取报表模板

InputStream is = application.getResourceAsStream(“/reportFiles/group.raq”);

ReportDefine rd = (ReportDefine)ReportUtils.read(is);

Context context = new Context();

Engine e = new Engine( rd, context );

IReport report = e.calc();

int startRow,endRow,startCol,endCol;

int i,j,k;

startRow=1;

endRow=1;

startCol=1;

endCol=1;

int rownum=report.getRowCount();

int colnum=report.getColCount();

for(i=1;i

for(j=1;j

Object s1=report.getCell(i,(short)j).getValue();

Object s2=report.getCell(i+1,(short)j).getValue();

if(s1!=null && s1==s2){

startRow=i;

endRow=i+1;

startCol=j;

endCol=j;

// continue;

for(k=i+2;k

System.out.println(“————–”);

Object s3=report.getCell(k,(short)j).getValue();

// System.out.println(“s3==========”+s3.toString()+”kkkk=”+(k));

if(s1==s3){

endRow=k;

}

else{

k–;

System.out.println(“k之 “+(k));

break;

// continue;

}

}

Area area=new Area(startRow,(short)startCol,endRow,(short)endCol);

if(!report.getCell(startRow,(short)startCol).isMerged()){

System.out.println(“startRow=”+(startRow)+”endRow=”+(endRow)+”startCol=”+(startCol)+”endCol=”+(endCol));

ReportUtils.mergeReport(report,area);

}

System.out.println(“合并完成“);

}

}

}

String rptName = “RPT_”+Double.toString(Math.random());

//3、计算报表

request.setAttribute(rptName,report);

%>

” srcType=”defineBean”

needPrint=”yes”

needSaveAsExcel=”yes”

/>

第三步:利用jsp发布报表

imgServlet?fileID=57c1289b-ee13-4af3-867f-9f33a92a4254

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值