润乾报表之可填式报表
- 格式:docx
- 大小:205.87 KB
- 文档页数:4
润乾报表实现将多个报表导入一个excel的多个sheet在实际的应用中,经常会有数据从excel导入系统数据库或者数据从系统中导入到excel,这两种业务操作润乾报表可以轻易地实现,但普通的导出数据大多都是导出到一个单独的excel中,还有一种客户经常使用的数据处理方式,是将多个报表的运算结果导入到同一个excel的多个sheet中。
下面讲述润乾报表如何实现这一业务。
一:实现思路先读取多个报表,分别计算多个报表,然后把多个结果添加到导出列表,最后实现导出到excel的多个sheet中。
二:实现步骤(以两个报表为例)1:首先制作两个报表one.raq和two.raq,如下图:One.raqTwo.raq2:利用润乾提供的方法读入两个报表,读入计算并导出,代码如下:<%@ page contentType=”text/html;charset=GBK” %><%@ taglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report” %><%@ page import=”com.runqian.report4.model.ReportDefine”%><%@ page import=”com.runqian.report4.model.engine.ExtCellSet”%><%@ page import=”ermodel.Context”%><%@ page import=”ermodel.Engine”%><%@ page import=”ermodel.IReport”%><%@ page import=”com.runqian.report4.util.ReportUtils”%><%@ page import=”ermodel.PageBuilder”%><%@ page import=”com.runqian.report4.view.excel.ExcelReport”%><html><body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0><%//创建context对象,设置报表的路径Context ctx = new Context();String path = “D:/Program Files/reportHome/webapps/demo/reportFiles/one.raq”;//读入报表ReportDefine rd = (ReportDefine) ReportUtils.read(path);Engine engine = new Engine(rd, ctx);//计算报表IReport report = engine.calc();Context ctx1 = new Context();String path1 = “D:/Program Files/reportHome/webapps/demo/reportFiles/two.raq”;ReportDefine rd1 = (ReportDefine) ReportUtils.read(path1);Engine engine1 = new Engine(rd1, ctx1);IReport report1 = engine1.calc();ExcelReport er = new ExcelReport();//导出的excel文件命名为moreSheetInExcel.xls,包括两个sheet,一个为one,另一个为two,保存在D盘下er.export(”one”, report);er.export(”two”, report1);er.saveTo(”D:/moreSheetInExcel.xls”); //输出到指定文件out.pr int(”导出成功!”);%></body></html>三:运行此jsp,执行其中的代码当页面中出现导出成功时,就说明两个报表已经成功导入到了moreSheetInExcel.xsl,并分别存储在one sheet和twosheet中,效果如下:总结:本文只是实现这一需求,具体项目中可以统一写一个方法类,动态传入要导出的报表名字,并且动态设置保存路径。
润乾报表V4.0 高级教程北京润乾信息系统技术有限公司第1章序言中国式报表有别于西方报表,中国式报表很复杂!润乾报表是专门用于解决中国式复杂报表的报表工具!润乾报表软件的核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的强关联语义模型、多源关联分片、不规则分组、自由格间运算、行列对称等技术,使得复杂报表的设计简单化,以往难以实现的报表可以轻松实现,避免了大量的复杂SQL编写与前期数据准备,报表设计的效率提高了一个数量级。
润乾报表采用JA V A开发,由两个部分构成:报表设计器和报表服务器。
润乾报表是一个很容易掌握的报表工具,对于复杂的中国式报表,完全不需要编程和复杂sql,只需要学习简单的表达式规则,就可以完成。
为了帮助读者快速掌握润乾报表的非线性模型用法,我们在《快逸报表V4.0入门教程》的基础上编写了这份《润乾报表V4.0高级教程》,希望读者先学习《快逸报表V4.0入门教程》,再来学习这份文档,效果更好。
本教程沿袭《快逸报表V4.0入门教程》的思路,避免复杂的概念,通过由浅入深的实例,深入浅出的讲解,辅以有针对性的练习题,一步一步帮助读者迅速掌握润乾报表的非线性报表模型的理论和操作。
只要你照着本教程去做,半天就可以初步掌握润乾报表。
希望在轻轻松松的过程中,你能很快地掌握非线性报表设计!第2章多源关联分片这份文档的思路,不再强调界面操作上的东西,比如某个按钮在哪里点,某个对话框怎么打开,更多地强调表达式怎么写,模型的原理是啥,表达式的规则是啥,用到的函数等2.1 多层交叉报表2.1.1一个例子我们先看下面这个多层交叉报表:[截图]从上面这个报表可以看出,这是一个多层的交叉报表,上边有两层动态横向扩展的上表头,左边有两层动态纵向扩展的左表头,中间的交叉点进行汇总统计,统计值和上表头、左表头息息相关。
我们看一下这样的报表在润乾报表中是如何设计的:1、首先定义数据集:[列出这个报表用到的数据集及其sql即可]2、写入单元格表达式,如下图所示:[设计界面截图,把格子拉大,表达式尽量看全]从上图可以看出,上表头分别通过[ ]格和[ ]格横向扩展形成,左表头通过[ ]格和[ ]格纵向扩展形成,中间的交叉点利用[sum]函数进行汇总,于是一个多层交叉报表很轻松就完成了。
润乾报表4.0产品手册企业级报表工具的理想选择北京润乾信息系统技术有限公司目录1、产品构成 (4)1.1产品构成图 (4)1.2产品构成 (4)2、核心优势 (6)2.1类Excel界面模型 (6)2.2非线性报表模型 (6)2.3强关联语义层模型 (8)2.4多源填报模型 (10)3、功能特点 (11)3.1报表设计 (11)3.2报表展现 (11)3.3数据填报 (15)3.4通用查询 (15)3.5即时报表 (16)3.6OLAP分析 (17)3.7报表分析 (18)3.8报表管理与调度 (18)3.9全面的部署集成方法 (19)3.10开发接口 (19)4、优势服务 (21)4.1我们的优势 (21)4.2服务与支持 (21)5、支持环境 (22)6、典型客户 (23)北京润乾信息系统技术有限公司简介北京润乾信息系统技术有限公司是北京市海淀高科技园区内的高新技术企业、软件企业,主要从事企业级报表工具产品的研发和推广。
润乾公司一直致力于在平台产品领域的探索,我们一直认为,报表在应用系统中是非常重要、不可缺少的组成部分,高效的报表工具不仅可以大大提高应用系统开发商的开发效率,而且可以使最终用户能够真正参与到报表的设计和修改中,从而不断灵活适应实际业务需要。
经过几个版本的积累和努力,润乾公司于2004年2月推出润乾报表3.0,率先实现了零编码处理复杂非线性报表的方式,配合以类EXCEL的绘制方式,润乾报表的制表效率数倍于以国外产品为代表的传统工具,且在展现输出、填报、集成性等细节方面也有全面超越,成为报表领域的新一代革命性产品。
在随后的版本中,润乾公司继续不断创新,相继推出了多源填报模型和强关联语义模型,大大扩展了报表工具的应用范围,改进了报表工具的应用方式,引领了报表工具的发展。
润乾公司深信,面对中国这样一个多样化需求、快速增长的软件市场,是可以以应用需求为基础、发挥中国人的智慧和创造力,做出优秀的报表工具,在企业级平台产品市场与国外厂商竞争的。
填报表用ajax实现关联单元格自动填充在做填报表时,可能会遇到这样的需求,某个单元格值发生变化后,其他一些单元格值也跟着发生变化,就是局部刷新报表。
如果是简单的加减乘除运算,可以在单元格的自动计算里面实现;如果关联单元格显示的内容是从数据库中取出来的,就不能写加减乘除表达式来实现了,需要用ajax来实现。
比如一个货物订单表,当选择完产品后,产品的单价、库存量自动填充,然后用户根据这些信息填写订货量。
实现思路:利用报表单元格的自动计算功能完成不同单元格信息的自动关联,自动计算表达式采用的是js函数,js函数中调用ajax,ajax中调用servlet查询数据库检索订单、库存量信息,返回给相应的单元格。
实现过程:制作上面的报表,A3单元格设置下拉数据集,用来选择产品,在B3单元格自动计算里面设置表达式“getValue("单价",A3)”(第一个参数是要查询的字段,第二个参数是关联的单元格,返回数据库中A3选择的产品对应的单价),C3单元格自动计算的表达式“getValue("库存量",A3)”,单元格D3设置为可写。
解析报表的jsp如下<%@ page contentType="text/html; charset=GBK" %><%@ taglib uri="/WEB-INF/runqianReport4.tld" prefix="report" %><html><body><%request.setCharacterEncoding( "GBK" );%><report:html name="report1" reportFileName="testAjax.raq"/><script language="javascript">var xmlHttp;var result;//初试化XMLHttpRequest对象function createXMLHttpRequest(){if(window.ActiveXObject){x mlHttp=new ActiveXObject("Microsoft.XMLHTTP");}else if(window.XMLHttpRequest){xmlHttp=new XMLHttpRequest();}}function call(){if (xmlHttp.readyState == 4){//响应内容解析完成,可以在客户端调用了if (xmlHttp.status == 200){//http请求一切正常,对GET和POST请求的应答文档跟在后面result = decodeURI(xmlHttp.responseText);}}}//根据关联单元格、字段名称返回该字段的值function getValue(field, orderID){//alert("aa");createXMLHttpRequest();varurl="<%=request.getContextPath()%>/ajax_Servlet2?selectField="+ field +"&orderID=" + orderID;xmlHttp.onreadystatechange = call;xmlHttp.open("GET", url, false);xmlHttp.send(null);return result;}</script></body></html>Servlet如下:public class AjaxServlet_2 extends HttpServlet{Connection conn ;Statement stmt;ResultSet rs;public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{response.setCharacterEncoding("GBK");Context ctx = Context.getInitCtx();try {conn =ctx.getConnectionFactory(ctx.getDefDataSourceName()).getConnection();stmt = conn.createStatement();} catch (Exception e) {e.printStackTrace();}String selectField = request.getParameter("selectField");String orderID = request.getParameter("orderID");if(!"".equals(selectField) || selectField == null){String selectSQL = "SELECT "+ selectField +" FROM 产品 where 产品ID="+ orderID;try {rs = stmt.executeQuery(selectSQL);if(rs.next()){PrintWriter out=response.getWriter();out.write(URLEncoder.encode(rs.getString(selectField).trim(),"UTF -8"));out.flush();out.close();}} catch (SQLException e) {e.printStackTrace();}finally{try {if(stmt != null) stmt.close();if(rs != null) rs.close();if(conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}}}页面效果如下上图中选择了“大众奶酪”,当产品名称列失去焦点后,效果如下上面的方法就可以实现用ajax自动填充关联单元格,方法比较简单,实现报表的局部刷新。
第一章填报/参数模板专题 一、 制作填报表的流程图二、 基本概念与相关操作2.1填报表2.1.1 基本概念润乾报表中,所有的报表可以从用途上分成两种:常规报表、填报/参数表单,其中填报/参数表单又可以细分成填报表和参数表单。
常规报表和填报/参数表单的本质区别是能否录入数据,常规报表只能浏览汇总运算数据,不能录入数据,而填报/参数表单不仅仅能够浏览数据,还可以录入数据。
填报表和参数表单的区别在于所录入的数据的用途,填报表录入的数据是用于向数据库提交保存的,而参数表单录入的数据作为参数值传递给报表的。
2.1.2 相关操作2.1.2.1新建填报表新建报表的时候,可以直接新建一个填报表,操作如下:点击,系统弹出新建报表向导,如下图所示:在填报类型中,选择,然后点击按钮,即可生成一张空白的填报表。
也可以参见前面的章节,点击下一步操作,逐步生成网格式、分组式、交叉式的填报表。
2.1.2.2转为填报表如果已经设计了常规报表,或者在设计报表之初,误将报表建成了常规报表,我们可以采用转为填报的功能,把常规报表转换成填报表。
具体操作如下:首先,在设计器中打开一张常规报表,点击,系统弹出报表属性编辑框,如下图所示:在填报类型栏中选择,然后点击,再点击,此时报表就已经是填报表了。
● 注意:只有填报表才可以设置相关的填报属性,常规报表没有填报属性2.2填报数据类型2.2.1 基本概念润乾报表的填报表,在网页上是纯html的方式,不用任何控件。
而对于html来说,它无法辨别录入的数据是何种数据类型,因此填报表提交后,服务器接收到的数据都成了文本,此时需要根据数据库相关字段的数据类型对提交上来的文本进行类型转换。
其次,如果某个单元格的数据必须是数值型,而用户录入的数据是字符型,例如:用户录入的是“abc”,此时如何进行快速的合法性检查呢?如果每次都要写合法性检查表达式,那就太麻烦了。
因此,我们引入了填报数据类型这个属性,用户录入数据时,我们会根据数据类型进行初步的合法性检查,至少保证数据类型正确;其次,服务器端,会根据填报时的数据类型对提交上来的文本进行数据类型转换,保证正确类型的数据提交到数据库中。
润乾报表设计器简易教程建立一个新的报表由存储过程的编写和表样的设计两部分组成,其中,表样的设计是利用润乾设计器进行的。
用润乾建立一个新的表样可以分为以下几步:新建数据源、连接数据源、设置参数、设置数据集、绘制表样、预览表样。
在以下步骤说明中,以预算上报下达差异表为例进行说明。
该报表的查询条件包括年度、单位和模板。
表样如下所示:2010年预算上报下达差异表制表部门:查询单位期间:2010年单位:万元预算科目本单位下级单位1 下级单位2 上报值下达值差异上报值下达值差异…预算科目1预算科目2预算科目3预算科目4预算科目5合计制表人:登录用户制表时间:2010-07-261新建数据源配置数据源的目的是为了连接数据库。
配置的步骤如下:➢打开设计器后,点击配置——数据源,打开配置数据源的界面。
➢点击新建,在数据库类型中根据实际情况选择数据库类型,针对TBM系统,选择的是关系数据库,点击确定。
➢在数据源常规属性设置页面进行数据源的设置,如下图所示:✓数据源名称:可以任意指定,建议采取tbmbj等名称对各地数据库进行直观性区分。
✓数据库类型:选择对应数据库类型,TBM系统采用的是DB2数据库。
✓客户端字符集:指的是从数据库取出的数据在客户端展现时的字符编码,可以采用默认的GBK。
✓数据库字符集:指的是从数据库中取过来的字符编码,根据数据库的编码类型选择,可以采用默认的GBK。
✓驱动程序:输入“com.ibm.db2.jcc.DB2Driver”即可。
✓数据源URL:数据源URL的输入格式为jdbc:db2:// IP地址:端口号/数据库名,例如:jdbc:db2://192.168.168.6:50000/tbmbj。
✓用户、口令:数据库用户名和密码。
➢设置完成后,点击【确定】按钮,回到数据源配置界面,关系数据库类型的数据源就配置完成了,数据源配置界面中就列出了新建的数据源。
2连接和断开数据源选中需要连接和断开的数据源后,点击数据源配置窗口的连接或断开即可。
润乾报表实现组内排序报表及改进报表开发中经常会遇到需要进行组内排序的报表,如按月份的分组汇总值排序显示,并显示每月销售额前十名的记录。
使用报表工具一般通过隐藏行列辅助可以实现,下面通过实例说明润乾报表的实现过程,以及改进方案。
报表需求根据销售管理系统数据统计客户所在地区的订单总额,地区并按订单总额降序排列,要求每个地区中显示销售额在前五名的销售人员及其订单数量和订单金额,其他人员归入“其他”项中。
报表样式如下:这里应该注意的是地区分组中如果销售人数少于5个则不显示“其他”项(如上图中的西北地区)。
润乾报表实现润乾报表实现主要依靠条件隐藏行实现,根据分组成员数量是否显示“其他”项,报表模板及表达式如下:在润乾报表中,使用ds.group()的多个参数,结合条件判断隐藏行,多种使用方法结合完成了报表开发,可见润乾报表的强大之处。
但是由于要按照分组后汇总的订单金额排序,所以在B3的分组表达式中应用ds1.sum(订单金额)表达式作为ds.group()的参数,对于原始数据量较大的情况下,该表达式效率较低;而且,由于只显示前5名销售,在C3(排名)和D3(其他)中设置了隐藏行表达式,对于分组较多的情况仍然会存在性能问题;另外需要在E3和F3中使用格集过滤表达式计算其他销售人员合计,计算时要带着单元格属性计算,效率仍然不高。
上述提到的问题在传统报表工具中皆是存在的,原因在于数据计算(报表数据源准备)与报表呈现混在一起导致,开发人员不得不再报表中编写较复杂的计算逻辑以完成报表开发,造成报表开发和运行效率都不高。
如果能将两部分分开,势必能提升开发和运行效率。
润乾公司在润乾报表的基础上,推出了可以完全满足复杂报表开发的集算报表,其内置了用于完成报表数据计算(数据源准备)的集算器,从而将数据计算和报表呈现剥离开,进一步梳理了报表开发流程,使得报表开发变得更加清晰。
上述报表需求使用集算报表可以这样完成:集算报表实现编写集算脚本使用集算脚本编辑工具完成计算脚本,并为报表输出计算后结果集:A1:执行sql得到初步汇总订单数据A2:按照地区分组后组内成员按订单金额排序A3-C7:循环A3,取前五名记录,并将超过第五的记录都归入“其他”项,结果写回A3A8:结果按地区总额降序排列后返回给报表报表调用使用集算报表设计器,新建报表,使用“集算器”数据集类型,选择上面编辑好的集算脚本(sort.dfx)报表模板及表达式报表模板中根据集算脚本返回的结果集,分别取得地区分组和销售列表等数据,无需复杂表达式即完成报表开发。
润乾报表3.0介绍润乾报表 3.0是用于统计报表制作及报表及数据填报的大型企业级工具软件。
产品首次成功解决了报表单元格与关系数据库之间的关联规律性,特别适合于中国式报表的填报和统计。
一、产品优势1.绘制方便润乾报表采用类EXCEL的绘制方式,真正做到所见即所得,把程序员从繁重且无聊的报表格式设置工作中解脱出来,极大的提高的表格绘制的方便度和效率,产品特有的EXCEL导入功能(包括格式)可充分利用业务人员原有积累。
2.数据模型先进润乾报表独创的数据模型首次成功地解决了中国报表中单元格与数据字段之间的弱关联性,彻底打破传统行式报表方案,报表行列完全对称,特有的层次扩展机制使多层分组及交叉报表制作非常简单,提供针对关联格的跨行跨组运算,很容易计算小计、同期比等数据。
同一报表中支持多个异构的数据源,允许报表各片之间无关,可用多个简单的数据集成组合出复杂报表,程序员无须再为每张报表编程(脚本或存储过程)或写复杂SQL准备数据。
3.输出能力丰富润乾报表每个单元格属性均提供条件控制,如颜色、行高、是否可见等均可与格内数据相关;支持代码显示值对应、多种数据格式、图片文件和图片字段的处理。
产品提供十几种各类统计图,支持PNG/GIF/JPG三种格式。
每张报表均可生成HTML、EXCEL、PDF三种输出格式(输出结果完全不失真,包括其内的统计图)。
单元格与统计图例均可加带参数的链接从而实现数据钻取功能,多层报表可在线收缩展开。
4.打印控制强大润乾报表提供强大的打印控制功能,按行数和纸张大小分页分栏或强制分页,表头自动重复(包括左表头),允许一张纸上打多个报表,提供末页补足空行。
可采用像素和毫米两种计量单位,独创的底图描绘功能以支持套打;5.集成性好润乾报表采用纯JAVA开发,利用服务器端提供丰富的API调用和标记可完全无缝地嵌入到基于J2EE的应用程序中(可看作应用程序员自己写的代码),程序员可更换报表的数据库连接和数据源、采用应用服务器的连接池管理;设计器也提供外置的数据源和数据字典定义,可由应用程序员提供这些信息。
润乾报表集算报表5.0在保留润乾报表V4.x的核⼼功能外,进⾏了优化和精简,其中报表函数也做了适当优化,这⾥就常见计算来⽐较⼀下⼆者函数语法之间的差异。
对⽐函数⼀览表1、数据集函数1.1、ds.group()润乾报表:datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp{,rootGroupExp}}}}}})集算报表:datasetName.group(<selectExp>{,filter_exp};{sort1}{:order1},…;{groupSortExp }:{ groupOrderExp })选项:@r 是否root数据集表达式。
主要改变:1、增加@r函数选项,取代原rootGroupExp表达式参数;2、取消分组前记录的排序顺序descExp参数;3、更改排序表达式和排序顺序参数语法。
举例:1.2、ds.select()/ds.select1()润乾报表:datasetName.select( <select_exp>{,desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} )datasetName.select1(selectExp{,filterExp{,rootGroupExp}})集算报表:将原ds.select()和ds.select1()合并为ds.select(),语法如下:datasetName.select(<select_exp>{:order_exp},{ filter_exp },{num_exp},{distinct_exp})选项:@r 是否root数据集表达式。
主要改变:1、增加@r函数选项,取代原rootGroupExp表达式参数;2、取消数据的排序顺序descExp参数;3、更改排序顺序参数语法。
1
属性——报表属性——填报类型
选择可以填报后才可配置单元格是否可以填写
2
单元格右键选择“填报属性”,可批量改变属性(前提是批量单元格属性一致),勾选是否填写。
页面默认为字符类型,除字符类型外设置“填报数据类型”
3
自动计算能使用函数,表达式前不能写=
4
如果一处函数写错,页面会出现不可填的单元格错误5行式报表
报表属性——报表样式——行式报表
发布后出现新增等按钮
六|、更新属性
必须连接数据源,无数据源无法新增等操作。
字段名对应数据库字段名,可选择区域对应更新属性里字段名称。
6滚动条
showReport.jsp中添加
网页中的滚动条
7.行属性。