知识库

推荐内容

快逸做的更好

产品优势

您的位置: 首页 > 知识库 > java相关技术 > 纵向同值单元格的合并

纵向同值单元格的合并

 

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

 

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

图一

第二步:Api合并单元格

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

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

  <%@ page contentType=”text/html;charset=GBK” %>

<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %>

<%@ page import=”com.runqian.report4.usermodel.*”%>

<%@ page import=”com.runqian.report4.view.*” %>

<%@ page import=”com.runqian.report4.model.*” %>

<%@ page import=”com.runqian.report4.model.engine.*” %>

<%@ page import=”com.runqian.report4.util.ReportUtils” %>

<%@ page import=”com.runqian.report4.view.xml.XMLReport,com.runqian.report4.cache.*,com.runqian.report4.usermodel.*”%>

<%@ page import=”java.util.*”%>

<%@ page import=”java.sql.*”%>

<%@ page import=”java.io.*”%>

 

<%

    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<rownum-1;i++){

        for(j=1;j<colnum;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<rownum;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);

    %>

<report:html name=”report1″ beanName=”<%=rptName%>” srcType=”defineBean”

    needPrint=”yes”

        needSaveAsExcel=”yes”

    />

第三步:利用jsp发布报表

本文标签:
发布日期:2012/09/29
本文分类: java相关技术