最近一段时间的工作中,遇到这样一个客户需求,客户希望动态合并单元格,合并的规则就是逐行遍历每一行的数据,如果同一行连续两个单元格的值相同,那么就将这两个单元合并到一起。

这个需求只能通过API来实现,实现的思路为:先将报表计算为IReport对象,然后逐行遍历每个单元格的值,将这个值跟后面单元格的值比较,如果两个值相同,那么就构造一个Area对象,把这两个单元格合并到一起。下面就做一个简单的例子,实现动态的将报表同一行连续两个值相同的单元格合并到一起,并把报表放到JFrame里面展现。

第一步:新建一张报表。

这里为了简便明了,报表没有连接数据源也没有构造数据集,只是将一些数字写到报表模板里,报表的样式如下图所示:

第二步:编写API代码,实现报表的读入,计算,合并单元格和展现

API的代码如下:

package com.zhengzhong.practise;

import javax.swing.JFrame;

import com.runqian.report4.model.ReportDefine;

import com.runqian.report4.model.engine.ExtCellSet;

import com.runqian.report4.usermodel.Area;

import com.runqian.report4.usermodel.CSReport;

import com.runqian.report4.usermodel.Context;

import com.runqian.report4.usermodel.Engine;

import com.runqian.report4.usermodel.INormalCell;

import com.runqian.report4.usermodel.IReport;

import com.runqian.report4.util.ReportUtils;

public class MergeReport {

/**

* @param args

* @throws Exception

*/

public IReport caculate(String raq) throws Exception{

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

ExtCellSet.setLicenseFileName(“D:/安装文件/快逸安装/License4.0[64100621100826_640000]/技术应用中心专用授权Server2010-12-31V4.0Windows.lic”);

Context cxt = new Context();

Engine engine = new Engine(rd,cxt);

IReport ir = engine.calc();

//int j =ir.getRowCount();

for(int i =1;i<=ir.getRowCount();i++){

for(int j =1;j

INormalCell cell1 = ir.getCell(i, (short)j);

INormalCell cell2 = ir.getCell(i, (short)(j+1));

//System.out.println(“cell1================”+cell1.getValue().toString());

//System.out.println(“cell2================”+cell2.getValue().toString());

if(cell1.getValue().toString() == cell2.getValue().toString()||cell1.getValue().toString().equals(cell2.getValue().toString())){

Area area=new Area(i,(short)j,i,(short)(j+1));

ReportUtils.mergeReport(ir, area);

}

}

}

return ir;

}

public static void main(String[] args) throws Throwable {

// TODO Auto-generated method stub

MergeReport mr=new MergeReport();

IReport ir = mr.caculate(“F:/mergeReport.raq“);

CSReport csr = new CSReport(ir);

JFrame frame = new JFrame();

frame.getContentPane().add(csr.getDisplayPane());//设置JFrame的相关属性并展现

frame.setSize(600, 400);

frame.setLocation(200, 100);

frame.setVisible(true);

}

}

上面代码中的caculate(String raq)方法作用是读进来需要计算的报表,配置报表引擎,计算出一个IReport对象,然后按行遍历IReport对象的单元格,用以下方法:

INormalCell cell1 = ir.getCell(i, (short)j);

INormalCell cell2 = ir.getCell(i, (short)(j+1));

if(cell1.getValue().toString() == cell2.getValue().toString()||cell1.getValue().toString().equals(cell2.getValue().toString())){

Area area=new Area(i,(short)j,i,(short)(j+1));

ReportUtils.mergeReport(ir, area);

}

判断两个连续的单元格的值是否相等,如果相等就构造一个关于这两个单元格的Area对象,再用ReportUtils.mergeReport()方法将这个对象设置好。最后这个caculate(String raq)方法返回一个设置好的IReport对象。

main(String[] args)方法的作用是调用上面的calculate方法,返回一个IReport对象,然后把这个IReport对象放到JFrame中展示。

第三步:编辑执行上面的API代码,查看效果。

在Myeclipse中运行上面的代码就可以看到如下图的效果:

这样,动态的将报表同一行连续两个值相同的单元格合并到一起,并把报表放到JFrame里面展现的需求就实现了。

JAVA开发一个合并单元格报表_快逸报表动态合并单元格相关推荐

  1. java 多选列表框_快逸报表:填报中的下拉多选列表框

    在快逸报表应用的填报页面中,下拉框是最常见的了.下拉选择框可以简化用户的输入,可以避免用户的错误录入,还可以轻松实现中文与代码的映射关系,可谓用途多多. 可是随着业务的越来越复杂,各种奇怪的需求均可能 ...

  2. java linux 管理系统_用Java开发一个本地服务管理软件

    使用Java开发一个本机服务管理程序,能够控制本机Tomcat.Apache服务的开启和关闭,图形界面控制.用户可以自己扩展其他服务,用来学习图形界面编程.多线程.事件响应等都不错. 一.最终界面 先 ...

  3. 编程语言用 Java 开发一个打飞机小游戏(附完整源码)

    编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...

  4. java开发一个简单的通讯录

    java开发一个简单的通讯录 ArrayList的综合应用 import java.util.*; public class ContactNote{static Scanner sc=new Sca ...

  5. 如何用java开发一个网站?

    问题:如何用java开发一个网站? 下载了最新的JDK软件.最新的Eclipse.数据库mysql以及tomcat.struts但是不知道怎么连接起来,在数据库连接的时候mysql-connector ...

  6. java数据回填_快逸数据回填的实现方法

    在web报表项目的填报流程中,用户经常会遇到需要按照某个模板来填报内容.本文介绍用快逸报表如何实现数据的回填功能. 第一步设计两张填报表,第一张作为接受回填数据的报表,第二张张作为填入数据的模板,其中 ...

  7. 快逸报表数据源找不到的一个原因

    快逸报表在设计器中编辑的时候,如果数据集不指定数据源名称,那么设计器会默认用当前数据库来设计报表. 但是,如果报表部署的应用服务器中存在多个数据源的话,所有的报表都会默认的去连接第一个数据源.那么用第 ...

  8. 快逸报表API直接生成v4统计图

    客户需求: 之前遇到过客户希望后台直接获取到快逸生成统计图,当时给客户解决的方法是通过先在快逸报表中设置统计图,后台运算后,获取到报表单元格的值,转化成ImageValue对象. 实现准备: 1:了解 ...

  9. 快逸报表日志文件的配置方法

    日志系统是一种不可或缺的跟踪调试工具,特别是在任何无人职守的后台程序以及那些没有跟踪调试环境的系统中有着广泛的应用. 长期以来, 日志系统作为一种应用程序服务,对于跟踪调试.程序状态记录.崩溃数据恢复 ...

  10. 深度经验总结:快逸报表工具单数据集版本和多数据集版本的主要区别之一

    快逸报表工具单数据集版本和多数据集版本的主要 区别之一,深度经验总结: 为了展现复杂含有计 算报表必须要union多个子查询出来形成一个数据 集 我现在是子查询1 union all 子查询2 uni ...

最新文章

  1. 在SQL 2005中用T-SQL插入中文数据时出现的问号或乱码的解决方案[转]
  2. Pentaho 7.0更新:数据准备和分析两不误
  3. 【01】为什么需要UML
  4. Windows——Windows 10 加装 Windoes 7 制作双系统时,Windoes 7 启动卡在正在启动界面,并且重启无效解决方案
  5. 网页中自动换行问题〔zz〕
  6. 传输参数【JAX-WS入门系列】第06章_使用MTOM处理二进制文件
  7. php培训12.22
  8. 万字长文:解读区块链7类共识算法
  9. 【直播间】移动互联网产品中如何用好HTML5?
  10. letex编辑输出】pdf文件嵌入字体embedded fonts的问题
  11. 反射之动态拼接sql字符串
  12. 基于MATLAB的运动车辆跟踪检测系统
  13. 牛客Top200---最长回文字符串(java)
  14. 电脑如何去除视频水印?
  15. 【jdk1.8特性】之Optional
  16. 关于钓鱼网站的实现原理与技术
  17. android 图片闪光动画_闪烁android图片
  18. python离线安装第三方库
  19. SAP 针对国家 country, 维护税码 tax code
  20. US zip code

热门文章

  1. C语言清屏函数和光标隐藏函数
  2. 使用struts框架的简单jsp登录页面
  3. linux命令 sync,linux sync命令详解
  4. Java从入门到精通
  5. 趣味俄罗斯方块代码分享(C语言)
  6. 【转载】世界上最牛的编辑器: Vim 3 (原创动图演示所有例子!)
  7. Java学习路线|【完整版】
  8. python爬虫100例教程 python爬虫实例100例子
  9. python颜色校正
  10. java 在线参考手册