润乾报表中API动态合并格,连续显示行号

制作这样的报表,如下图:

 

报表中第一列,第二列是分组函数,当某行第二格的值与第一格的值相同且只有一个值时(如“国家安全”这行),则将这两个格子合并,并将下行的“小计”行隐藏。在第4列,将显示的行按行号连续显示。最终的效果如下图:

 

这张报表怎么做呢,我们看一下这个例子。


1 内建数据:

 

2 生成分组报表,然后追加一列,行号列,如下图:

 

单元格表达式:

A1,B1,C1,D1分别为:单位,科室,科员数,行号

A2、A3:=ds1.group(单位,false)

B2:=ds1.group(科室,false)

C2:=ds1.Select(科员数)

B3:小计

C3:=ds1.Sum(科员数)

A4、B4:合计

C4:=ds1.Sum(科员数)

3 隐藏行:

选中B3单元格,在其“隐藏行”属性中,写表达式:

 

报表就制作好了,命名为“area.raq”,预览,就能看到文章开头的第一个效果图了:

 

怎么样能得到最终的效果,就需要用api运算报表了,见下面的jsp代码。

5 api运算报表,如下代码:

<%@ page contentType="text/html;charset=gb2312" %>

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

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

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

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

<%@ page import="com.runqian.report4.util.*"%>

<%

       //第一步,读取报表模板

       String reportFileHome=Context.getInitCtx().getMainDir();

       String reportPath = application.getRealPath(reportFileHome)+"\\area.raq";

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

       System.out.println("reportPath=="+reportPath);  

      

       //第二步,运算报表

       Context context = new Context();       

       Engine enging = new Engine( rd, context);

       IReport iReport = enging.calc();

      

       //第三步,设置合并格与设置行号

       int rowCount = iReport.getRowCount();

       //int ColCount = iReport.getColCount();

       int k = 1;  //上表头有1行,从第2行开始设置行号,所以下面的i也是从2开始的

       int m = 0;

       for (int i = 2; i <= rowCount; i++) {

              INormalCell NCell1 = iReport.getCell(i, (short) 1);

              INormalCell NCell2 = iReport.getCell(i, (short) 2);

              INormalCell NCell4 = iReport.getCell(i, (short) 4);

              Object NCellValue1 = NCell1.getValue();

              Object NCellValue2 = NCell2.getValue();

              Object NCellValue4 = NCell4.getValue();

             

              int n = 0;

              if(NCellValue1.equals(NCellValue2)){                 

                     k=k+1;

                     n=1;

                    

                     //构造一个合并区域

                     Area area_2=new Area(i,(short)1,i,(short)2); 

                     try {                    

                            ReportUtils.mergeReport(iReport,area_2); //执行合并操作

                     } catch (Exception e1) {               

                     }                         

              }

              m = i - k + n ;      //算出行号        

              NCell4.setValue(m);  //设置行号        

             

       }

       //第四步,展现

       HtmlReport hReport = new HtmlReport( iReport,"report1" );     

       out.print(hReport.generateHtml());     

%>

6 展现页面,就能看到效果了:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值