报表知识库
我要提问

润乾报表中如何动态设置单元格的左主格

单元格进行纵向扩展时,我们称之为其右边格子的左主格。

左主格属性可以默认缺省,也可以人为的改变。左主格可以固定的设置为某个单元格,也可以根据某个条件动态的设置。条件成立时左主格就是这个单元格,条件不成立时就是另一个单元格。比如下面的需求,就要用到动态的设置单元格的左主格的功能:一张报表有一行三列,A1是B1的左主格,B1是C1的左主格。B列根据条件隐藏,如果B列隐藏,C列就根据A列扩展;如果B列不隐藏,C列就根据B列扩展。

下面就介绍动态设置单元格左主格的方法。

大致思路:

用提供的API读取报表,得到一个ReportDefine对象,从这个对象中得到需要设置左主格的INormalCell单元格对象,然后根据条件用单元格类中的setLeftHead方法设置这个单元格的左主格,用Bean方式发布报表。

第一步:设计报表

设计一个报表,如下图所示。

1.png

为报表添加一个参数,命名为arg。

单元格中设计的内容如下:

A1: A列
B1: B列
C1: C列
D1: 接收的参数
A2: aa
B2: =to(1,5)
C2: cc
D2: =@arg

第二步:编写发布报表的jsp

Jsp的内容如下:

<%@ page contentType=”text/html;charset=GBK”%>
<jsp:directive.page import=”com.runqian.report4.model.ReportDefine”/>
<jsp:directive.page import=”com.runqian.report4.util.ReportUtils”/>
<jsp:directive.page import=”com.runqian.report4.usermodel.INormalCell”/>
<jsp:directive.page import=”java.util.Enumeration”/>
<%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report”%>
<%
//得到动态设置单元格左主格的标志。如果参数arg的值为1,设置C2单元格的左
//主格为A2,并且删除B列;如果参数arg的值不为”1″,设置C2单元格的左主格为B2
String arg = request.getParameter(”arg”);
//取得报表真实路径
String reportPath = request.getRealPath(”/reportFiles/test.raq”);
//用ReportUtils类中的read方法读取报表
ReportDefine rd = (ReportDefine)ReportUtils.read(reportPath);
//得到要设置左主格的单元格,第二行第三列
INormalCell cellC2 = rd.getCell(2,(short)3);
//设置单元格的左主格
if(arg.equals(”1″)){
//设置C2的左主格为A2
cellC2.setLeftHead(”A2″);
//删除B列
rd.removeCol((short)2);
}else{
//设置C2的左主格为B2
cellC2.setLeftHead(”B2″);
}
//生成一个动态的beanName
String beanName = “RPT_”+Double.toString(Math.random());
request.setAttribute(beanName,rd); //把ReportDefine对象在request中保存
//接收参数
StringBuffer param = new StringBuffer();
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);
if(paramValue!=null){
//把参数拼成name=value;name2=value2;…..的形式
param.append(paramName).append(”=”).append(paramValue).append(”;”);
}
}
}
%>
<html>
<body>
<table align=center>
<tr><td><!-用Bean方式发布报表->
<report:html name=”report1″
srcType=”defineBean”
beanName=”<%=beanName%>”
params=”<%=param.toString()%>”
/>
</td></tr>
</table>
</body>
</html>

本例中将这个jsp命名为MyJsp.jsp,保存到润乾报表demo应用下的reportJsp文件夹中。

第三步:预览

在IE浏览器中输入URL:http://127.0.0.1:6001/domo/reportJsp/MyJsp.jsp?arg=1,效果如下

2.png

B列删除,C列跟随A列扩展。

更改参数arg的值,再次浏览:http://127.0.0.1:6001/demo/reportJsp/MyJsp.jsp?arg=12,效果如下

3.png

C列跟随B列扩展。

总结:以后遇到动态设置单元格左主格的问题,可以按照上面的方法实现了。如果要动态设置单元格的上主格,可以用类setTopHead中方法。