java报表

合集下载

Java开源报表Jasper入门(2)--使用JasperSoftStudio创建一个简单报表

Java开源报表Jasper入门(2)--使用JasperSoftStudio创建一个简单报表

Java开源报表Jasper⼊门(2)--使⽤JasperSoftStudio创建⼀个简单报表在接下来的教程中,我们将实现⼀个简单的JasperReports⽰例,展现其基本的开发、使⽤流程。

⽂章很长,不过是以图⽚居多,⽂字并不多。

Jasper Studio是基于Eclipse的报表设计⼯具(不熟悉Eclipse的看官先去熟悉⼀下基本知识吧),默认⼯作区设置为当前⽤户主⽬录下的JaspersoftWorkspace⽂件夹,并且不可更改。

⾸先,我们创建⼀个报表⼯程,本例中命名为DemoProject,然后创建⼀张新的报表(File --> New–->Jasper Report),就会出现类似下图所⽰的窗⼝让我们选择⼀个模板。

此例我们选Coffee模板,然后点Next。

在接下来的页⾯⾥,我们给报表模板起个名字(Demo1.jrxml)并放在DemoProject的根⽬录下,然后点Next,于是进⼊了数据源选择界⾯:数据源是填充报表的关键,我们必须制定⼀个数据适配器(Data Adapter),此时我们有三种选择:1. 选择“OneEmpty Record - Empty rows”,这样我们就可以专注于报表的设计,⽽暂时不指定数据源,创建完报表之后,我们随时可以制定别的数据源。

2. 选择“SampleDB - Database JBDC Connection”,这是Jaspersoft Studio安装时提供的⼀个⽰例数据库。

3. 点击“New”按钮创建⼀个新的数据源。

这正是本例要采⽤的⽅式,我们将创建⼀个连接到本机MySql数据库的world的数据源。

⾸先点击“New”,在弹出的向导页中选择“Database JDBC Connection”,然后点“Next”弹出下图所⽰的页⾯:配置好基本的数据库连接信息,点击“Test”测试通过之后,⼀个数据源就配置好了,我们点击“Finish”结束配置。

帆软报表 与java程序集成最佳实践

帆软报表 与java程序集成最佳实践

帆软报表与java程序集成最佳实践帆软报表是一款功能强大的报表工具,它可以帮助用户设计、生成和发布各种类型的报表。

与Java程序集成可以实现更灵活和定制化的报表生成和数据处理功能。

以下是帆软报表与Java程序集成的最佳实践。

1.引入帆软报表依赖库:首先,在Java项目中需要引入帆软报表的依赖库。

可以通过在项目的构建文件(如Maven的pom.xml文件)中添加帆软报表的依赖,然后使用构建工具自动下载和导入依赖库。

2.创建报表模板:在集成帆软报表之前,你需要先创建报表模板。

帆软报表提供了强大的设计工具,可以通过拖拽、设置属性等方式来设计报表模板。

你可以在模板中添加文本、图片、表格、图表等元素,并设置样式和格式。

3.连接数据源:帆软报表可以连接各种类型的数据源,包括数据库、文件、Web服务等。

在Java程序中,你可以使用帆软报表提供的API来连接数据源,并获取报表需要的数据。

具体的连接方式和API使用可以参考帆软报表的文档和示例代码。

4.填充报表数据:在连接数据源之后,你可以使用帆软报表提供的API来填充报表数据。

你可以根据需要查询数据库、读取文件、调用Web服务等,然后将数据填充到报表模板中对应的位置。

5.设置报表参数:帆软报表支持设置参数来动态控制报表的生成和展示。

你可以在Java程序中设置报表参数,并将参数传递给报表引擎。

这样就可以根据不同的参数值生成不同的报表内容。

6.导出报表:生成报表之后,你可以选择将报表导出为不同的格式,如PDF、Excel、Word、HTML等。

帆软报表提供了相应的API来实现报表导出功能。

你可以根据需要选择合适的导出格式,并将报表保存为文件或通过网络传输给用户。

7.定制报表功能:通过集成帆软报表,你可以实现更复杂和定制化的报表功能。

帆软报表提供了丰富的API和扩展机制,可以满足用户各种需求。

你可以使用API查询和处理数据、设置报表样式、添加自定义的计算字段和函数等。

java开发润乾报表

java开发润乾报表

润乾报表设计1、安装润乾报表设计器2、设计报表模板3、数据集为存储过程的报表设计4、将设计好的模板部署到应用中过去5、存储过程1安装润乾报表设计器1.1获取安装包安装包在svn上:http://10.120.23.41/svn/core/开发组资料/开发工具/润乾报表v4.5.exe Check后安装即可.安装后的目录结构如下:1.2完成相关授权使用润乾报表设计器需要完成两次授权:A: 润乾报表设计器授权B: 设计完成后发布应用的服务器授权目前我们本机采用的是Windows的授权,服务器上的ycps项目采用的是Linux授权版本,所以我们在开发完成后不要commit授权文件1.3授权完成授权完成,启动后的界面如下:2简单报表设计2.1配置数据源A: 配置>数据源B: 数据源配置界面C: 点击新建自己的数据源D: 数据源配置细节,为了开发的统一数据源名称统一采用“oracle”E: 确定之后F: 连接成功2.2数据集的配置A: 新建报表如图:A: 配置数据集,也可以直接F11快捷键B: 数据集配置C: 选择模式、表、字段D:选择需要的字段E:此时你可以点击语法选项卡看看,聪明的你就明白了,然后确定即可F:数据集ds1已经创建完成2.3简单报表的实现A:利用配置好的数据集设计简单模板B:启动tomcat、发布模板、在浏览器中浏览C:浏览3数据集为存储过程的报表设计3.1配置数据源见2.13.2配置数据集3.2.1配置存储过程数据集B:弹出存储过程数据集,在此之前存储过程一定要测试成功C:配置数据集参数说明:1、参数的个数、顺序要和procedure严格一致2、结果类型应该指定具体类型如字符串3、注意输出参数及类型D:确定,但是没有完!3.2.2配置模板参数可以这样理解:刚才配置的数据集参数需要由报表模板来提供,那模板也需要配置参数A:配置> 参数B:参数编辑,然后确定模板设计完毕3.2.3在设计器中浏览报表A:按F11进入数据集设置B:点击浏览数据C:填入必填的参数确定即可浏览,注意此处的浏览只是证明数据集设置的正确性D:数据集设置完成且正确后会出现如下。

java 数据统计报表设计方案

java 数据统计报表设计方案

java 数据统计报表设计方案Java数据统计报表设计方案一、引言在现代信息化时代,数据统计和分析是企业决策和管理的重要环节。

为了更好地展示和分析数据,设计一个合理的数据统计报表是非常必要的。

本文将以Java为基础,介绍一个设计方案来实现数据统计报表的功能。

二、需求分析在设计数据统计报表之前,首先需要对需求进行分析。

根据不同的业务需求,数据统计报表可能包括以下几个方面的功能:1. 数据采集:从不同的数据源采集数据,包括数据库、文件、接口等。

2. 数据预处理:对采集到的原始数据进行清洗和处理,使其符合报表展示的要求。

3. 数据统计:根据需求进行数据聚合和计算,生成统计结果。

4. 报表设计:将统计结果以表格、图表等形式展示出来,方便用户查看和分析。

5. 报表导出:将生成的报表导出为Excel、PDF等格式,方便用户保存和分享。

三、系统设计基于以上需求,本文设计了一个基于Java的数据统计报表系统。

主要包括以下几个模块:1. 数据采集模块该模块负责从不同的数据源中采集数据。

可以通过使用Java提供的数据库连接池技术,连接数据库并执行SQL查询语句,获取需要的数据。

同时,还可以通过Java的文件读取和网络请求等方式,获取其他数据源的数据。

2. 数据预处理模块该模块负责对采集到的数据进行预处理,包括数据清洗、格式转换等。

可以使用Java提供的字符串处理、正则表达式等工具来实现数据清洗。

同时,可以使用Java的日期时间处理、数据类型转换等功能,将数据格式转换为报表需要的格式。

3. 数据统计模块该模块负责根据需求进行数据聚合和计算。

可以使用Java提供的集合框架,通过遍历和计算等操作,实现数据的统计功能。

同时,可以根据具体需求,使用Java提供的统计函数和算法,进行更复杂的数据分析和计算。

4. 报表设计模块该模块负责将统计结果以表格、图表等形式展示出来。

可以使用Java提供的图形界面库,如JavaFX或Swing,设计报表界面。

Java_实现iReport打印

Java_实现iReport打印

iReport报表打印功能代码编写环境系统:windows xp开发工具:Myeclipes6.0JDK版本:Java6(jdk6.0,jre6.0)服务器:Tomcat5.5Ireport版本:iReport-2.0.5 windows 安装版(iReport-2.0.5-windows-installer.exe)实现步骤一、iReport-2.0.5安装。

选择安装路径默认安装(一直点击下一步)。

二、将iReprot的jasperreports-2.0.5.jar文件复制到Myeclipes中你工程的WEB-INF/lib目录下。

jasperreports-2.0.5.jar文件所在位置在你iReprot的安装路径下,我的是C:\Program Files\JasperSoft\iReport-2.0.5\lib。

三、要实现打印的Jsp文件编写,Jsp文件中打印按钮或者打印连接应该提交给一个javascript,具体代码如:<a href="javascript: print(${exammanage.oid })"><fontcolor="blue">打印</font></a>javascript代码如下function print(oid){if(!confirm("确定要打印该资格证吗?"))return ;window.showModalDialog('${ctx}/exam/exammanage/examprint_cert.jsp?oid='+oid,'','dialogWidth:50px;dialogHeight:150px;dialogTop:1000px;dialogLef t:1000px');document.forms[0].flg.value = "0";document.forms[0].action="${ctx}/ExamPermitPrint.html";document.forms[0].submit();}代码解释:1、window.showModalDialog('${ctx}/exam/exammanage/examprint_cert.jsp?oid='+oid,'','dialogWidth:50px;dialogHeight:150px;dialogTop:1000px;dialogLef t:1000px');此段的功能是显示打印提示窗口,我的文件是WebRoot路径下/exam/exammanage/路径下的examprint_cert.jsp文件,而且需要传一个你所要打印的记录的唯一字段(数据库中唯一代表一条记录的字段),我这里用OID。

java 大数据 多维度 报表实现思路

java 大数据 多维度 报表实现思路

一、概述随着互联网的快速发展和信息化的进程加快,企业和组织管理的复杂性日益增加,需要对数据进行更深入的分析和挖掘。

在大数据时代,如何从海量的数据中提取有用信息,构建多维度报表,成为了企业管理和决策的重要工具。

而Java作为一种广泛应用于企业信息系统的编程语言,其强大的特性使得在大数据多维度报表实现中具有很高的适用性。

二、Java 在大数据多维度报表实现中的优势1. Java具有强大的跨评台性,可以在各种操作系统上运行,实现数据评台的灵活部署。

2. Java拥有丰富的类库和工具,可以快速实现数据处理和分析的功能,对大数据的处理能力极强。

3. Java具有良好的可扩展性和灵活性,可以根据不同的需求对系统进行定制开发,满足企业的多样化需求。

三、大数据多维度报表实现思路在实现大数据多维度报表时,通常可以采用以下思路:1. 数据采集和清洗:首先需要从各个数据源采集数据,并进行清洗和预处理,确保数据的准确性和完整性。

2. 数据存储和管理:将处理过的数据进行存储和管理,通常可以选择使用大数据评台或关系型数据库进行存储,同时也可以考虑使用分布式存储系统进行数据管理。

3. 多维度数据分析:通过构建多维度数据模型,对数据进行多维度的分析,通常可以采用OLAP(联机分析处理)技术进行数据分析,构建多维度立方体。

4. 报表设计和展示:根据分析的结果设计报表模板,展示多维度数据分析的结果,通常可以选择使用Java的报表工具进行设计和展示,如JasperReports、BIRT等。

四、Java大数据多维度报表实现的具体技术在实现大数据多维度报表时,可以利用Java的多种技术来实现:1. 数据采集和清洗:可以使用Java的各种数据采集工具和ETL (Extract-Transform-Load)工具来实现数据的采集和清洗,如Apache Flume、Apache Nifi等。

2. 数据存储和管理:可以使用Java的关系型数据库(如MySQL、Oracle)或者NoSQL数据库(如HBase、MongoDB)来进行数据的存储和管理。

java workbook 获取表格的数量的方法

java workbook 获取表格的数量的方法

一、介绍在Java编程中,经常需要使用Excel或其他表格文件进行数据处理和分析。

而对于一个Excel工作簿(workbook)中包含的表格数量,也是一个常见的需求。

本文将介绍如何使用Java编程获取一个工作簿中包含的表格数量的方法,帮助读者更好地完成数据处理和分析任务。

二、使用POI库Apache的POI库是一个用于处理Microsoft Office文件的开源Java 库,它提供了丰富的API用于读取、写入和操作Excel、Word等文件。

获取Excel工作簿中表格数量的方法就可以使用POI库来实现。

三、创建工作簿对象需要使用POI库来创建Excel工作簿对象。

代码示例如下:```javaFile file = new File("file.xlsx");InputStream inputStream = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(inputStream); ```这段代码首先创建了一个文件对象,然后创建了一个文件输入流并将文件对象传入,最后使用输入流创建了一个XSSFWorkbook对象,代表了Excel工作簿。

四、获取表格数量一旦有了工作簿对象,就可以使用POI库提供的方法来获取工作簿中包含的表格数量。

代码示例如下:```javaint numberOfSheets = workbook.getNumberOfSheets();```这段代码调用了XSSFWorkbook对象的getNumberOfSheets()方法,该方法返回了工作簿中包含的表格数量。

五、完整示例下面是一个完整的示例代码,演示了如何使用POI库来获取Excel工作簿中包含的表格数量:```javaimport java.io.File;import java.io.FileInputStream;import java.io.IOException;import ermodel.XSSFWorkbook;import ermodel.Workbook;import ermodel.Sheet;public class M本人n {public static void m本人n(String[] args) {try {File file = new File("file.xlsx");FileInputStream inputStream = new FileInputStream(file); XSSFWorkbook workbook = newXSSFWorkbook(inputStream);int numberOfSheets = workbook.getNumberOfSheets(); System.out.println("Number of sheets in the workbook: " + numberOfSheets);for (int i = 0; i < numberOfSheets; i++) {Sheet sheet = workbook.getSheetAt(i);System.out.println("Sheet " + (i+1) + " name: " + sheet.getSheetName());}workbook.close();inputStream.close();} catch (IOException e) {e.printStackTrace();}}}```在这个示例中,我们首先创建了一个File对象,然后根据文件对象创建了一个文件输入流。

Java程序设计报告(供应合同台账系统)

Java程序设计报告(供应合同台账系统)

北华大学Java 课程设计——供应合同台帐系统姓名:班级:信息13-2学号:6院系:电子信息工程指导教师:设计日期:2015年12月目录摘要 ................................................................................................ .2一、总体概述 (3)二、需求分析 (3)三、开发环境 (5)1、Java语言简介 (5)2、eclipse (6)3、MySQL (6)四、架构图 (7)1、合同管理流程 (7)2、系统框图 (8)五、界面设计及基本操作说明 (9)1、安装 (9)2、注册 (9)3、登陆 (10)4、信息查询及修改 (11)5、添加信息 (12)6、打印信息 (12)六、数据库设计 (13)七、心得体会 (16)八、参考文献 (16)附录: (17)摘要基于eclipse开发环境,应用MySQL数据库,使用Java语言编写供应合同台账系统,为企业提供决策、计划、控制与经营绩效评估的全方位、系统化的合同管理平台。

多用户,分权限,联网独立操作该系统。

本系统遵循商务智能技术架构,由数据采集、数据仓库构成,应用架构采用两层架构,分别是:客户端程序/数据库服务器,应用服务器采用J2SE标准进行开发,数据库使用MySQL。

各层间可实现功能服务策略交互。

关键字Java ;合同;台账系统一、总体概述本课题为供应合同台账系统,实现合同的有序管理。

合同管理系统,是建立在信息技术基础上,利用现代企业的先进管理思想,为企业提供决策、计划、控制与经营绩效评估的全方位、系统化的合同管理平台。

通过电子台账市委可以有效快捷的管理全市重点工程和工程建设领域突出问题进行专项治理情况,针对在建项目中存在审批资料不完整、手续不完善等问题,通过建立台账等措施跟踪查办。

合同管理是企业经营管理基础工作上的重要内容,通过加强管理,规范企业合同的签订和履行,能够有效防范风险、优化管理降低成本、提高效益。

润乾java生成pdf参数

润乾java生成pdf参数

润乾java生成pdf参数
润乾Java是一种基于Java语言的开源报表工具,用于生成各种报表,包括PDF报表。

要生成PDF报表,您需要使用润乾Java的PDF 插件。

以下是使用润乾Java生成PDF报表时的一些常见参数:
1. 报表文件路径:指定要生成的报表的路径和文件名。

2. 输出路径:指定生成的PDF报表的输出路径和文件名。

3. 页面大小:指定PDF报表的页面大小,例如A4、A3等。

4. 边距:指定PDF报表的边距,例如上、下、左、右的边距。

5. 打印方向:指定PDF报表的打印方向,例如纵向或横向。

6. 分页设置:指定PDF报表的分页方式,例如自动分页或固定分页。

7. 打印范围:指定PDF报表的打印范围,例如单页或多页。

8. 样式设置:指定PDF报表的样式设置,例如字体、颜色、背景等。

9. 数据源:指定生成PDF报表所需的数据源,例如数据库、Excel 文件等。

10. 脚本设置:指定生成PDF报表所需的脚本设置,例如条件判断、循环等。

这些参数可以根据您的需求进行设置和调整,以满足您的具体要求。

Java导出Excel统计报表合并单元格的方法详解

Java导出Excel统计报表合并单元格的方法详解

Java导出Excel统计报表合并单元格的⽅法详解⽬录前⾔⽰例注意事项总结前⾔Apache POI是⼀种流⾏的API,允许程序员使⽤Java程序创建,修改和显⽰MS Office⽂件。

它是由Apache Software Foundation开发和分发的开源库,⽤于使⽤Java程序设计或修改Microsoft Office⽂件。

它包含将⽤户输⼊数据或⽂件解码为MS Office⽂档的类和⽅法。

HSSF - ⽤于读取和写⼊MS-Excel⽂件的xls格式⽰例类似上⾯的需要合并表头的报表在⽇常的开发中也是经常遇到,这⾥总结下关于类似的报表开发整理。

对于这种的报表看起来很⿇烦,但其实掌握了技巧开发起来也是很简单的。

下⾯的代码仅供参考,有些字段为了脱敏都以数字显⽰了,见谅。

// 创建sheetSheet sheet = wb.createSheet("当⽉");//表头字体Font headerFont = wb.createFont();headerFont.setFontName("宋体");headerFont.setFontHeightInPoints((short) 18);headerFont.setBold(true);headerFont.setColor(Font.COLOR_NORMAL);//正⽂字体Font contextFont = wb.createFont();contextFont.setFontName("宋体");contextFont.setFontHeightInPoints((short) 12);headerFont.setBold(true);//表头样式,左右上下居中CellStyle headerStyle = wb.createCellStyle();headerStyle.setFont(headerFont);// 左右居中headerStyle.setAlignment(HorizontalAlignment.CENTER);// 上下居中headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);headerStyle.setLocked(true);// ⾃动换⾏headerStyle.setWrapText(false);//单元格样式,左右上下居中边框CellStyle commonStyle = wb.createCellStyle();commonStyle.setFont(contextFont);// 左右居中commonStyle.setAlignment(HorizontalAlignment.CENTER);// 上下居中commonStyle.setVerticalAlignment(VerticalAlignment.CENTER);commonStyle.setLocked(true);// ⾃动换⾏commonStyle.setWrapText(false);//单元格样式,左右上下居中边框CellStyle commonWrapStyle = wb.createCellStyle();commonWrapStyle.setFont(contextFont);//单元格样式,竖向边框CellStyle verticalStyle = wb.createCellStyle();verticalStyle.setFont(contextFont);CellStyle commonStyleNoBorder = wb.createCellStyle();commonStyleNoBorder.setFont(contextFont);commonStyleNoBorder.setLocked(true);// ⾃动换⾏commonStyleNoBorder.setWrapText(false);CellStyle alignLeftStyle = wb.createCellStyle();alignLeftStyle.setFont(contextFont);alignLeftStyle.setLocked(true);// ⾃动换⾏alignLeftStyle.setWrapText(false);//单元格样式,左对齐⽆边框CellStyle alignLeftNoBorderStyle = wb.createCellStyle();alignLeftNoBorderStyle.setFont(contextFont);alignLeftNoBorderStyle.setLocked(true);// ⾃动换⾏alignLeftNoBorderStyle.setWrapText(false);//单元格样式,右对齐CellStyle alignRightStyle = wb.createCellStyle();alignRightStyle.setFont(contextFont);alignRightStyle.setLocked(true);// ⾃动换⾏alignRightStyle.setWrapText(false);// ⾏号int rowNum = 0;//设置列宽for (int i = 0; i < 11; i++) {sheet.setColumnWidth(i, 3000);}//第⼀⾏Row r0 = sheet.createRow(rowNum++);r0.setHeight((short) 800);Cell c00 = r0.createCell(0);c00.setCellValue("表⼆:");c00.setCellStyle(alignLeftNoBorderStyle);//合并单元格sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8));//第⼆⾏城市对象综合统计表Row r1= sheet.createRow(rowNum++);r1.setHeight((short) 800);Cell r10 = r1.createCell(0);r10.setCellValue("城市对象管理情况统计表");r10.setCellStyle(headerStyle);//合并单元格sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 8));//第三⾏Row r2 = sheet.createRow(rowNum++);r2.setHeight((short) 800);Cell r20 = r2.createCell(0);r20.setCellValue("填表单位:XXX街道");r20.setCellStyle(alignLeftNoBorderStyle);//合并单元格sheet.addMergedRegion(new CellRangeAddress(2, 2, 0, 4));//第四⾏Row r3 = sheet.createRow(rowNum++);r3.setHeight((short) 700);String[] rowSecond = {"地区", "对象情况1", "","对象情况2","" ,"调增情况3","","情况4",""}; for (int i = 0; i < rowSecond.length; i++) {Cell tempCell = r3.createCell(i);tempCell.setCellValue(rowSecond[i]);tempCell.setCellStyle(commonStyle);}//第5⾏Row r4 = sheet.createRow(rowNum++);String[] rowSecond5 = {"1", "2", "3","4","5","6","7","8"};for (int i = 0; i < rowSecond5.length; i++) {Cell tempCell = r4.createCell(i+1);tempCell.setCellValue(rowSecond5[i]);tempCell.setCellStyle(commonStyle);}//合并单元格sheet.addMergedRegion(new CellRangeAddress(3, 4, 0, 0));sheet.addMergedRegion(new CellRangeAddress(3, 3, 1, 2));sheet.addMergedRegion(new CellRangeAddress(3, 3, 3, 4));sheet.addMergedRegion(new CellRangeAddress(3, 3, 5, 6));sheet.addMergedRegion(new CellRangeAddress(3, 3, 7, 8));//查询数据List<Map<String, Object>> dataList = XXX.list(XXX);//统计合计数据Map<String,Object> mapTotal = new HashMap<>();for (Map<String, Object> map : dataList) {Row tempRow = sheet.createRow(rowNum++);//列表数据Cell tempCell0 = tempRow.createCell(0);String sqmc = (String) map.get("XXX");tempCell0.setCellValue(sqmc);tempCell0.setCellStyle(commonStyle);}//导出response.setContentType("application/vnd.ms-excel");// ⽂件名String fileName = "报表名称.xls";response.setHeader("Content-disposition", "attachment;filename=\"" + fileName + "\""); OutputStream stream = response.getOutputStream();try {if (null != wb && null != stream) {wb.write(stream);stream.close();}} catch (Exception e) {log.error("excel⽂档导出错误-异常信息:", e);}注意事项【1】POI操作的⾏和列都是从0位置开始的【2】所有的复杂表头⽆⾮是合并单元格,这⾥都可以通过下⾯的API实现int addMergedRegion(CellRangeAddress region)添加合并的单元格区域创建新的单元格范围。

javaweb统计报表_用Java在Web页面上输出统计图统计报表(转)

javaweb统计报表_用Java在Web页面上输出统计图统计报表(转)

javaweb统计报表_⽤Java在Web页⾯上输出统计图统计报表(转)⽤Java在Web页⾯上输出统计图 统计报表 (转)[@more@]⽤Java在web页⾯上输出统计图河南省焦作⽔利局 聂春⽣在 和Intranet 的应⽤中,数据库和Web 技术的结合是传统MIS 系统移植到Internet(Intrant) 环境的关键, 已有不少⼚商推出了各⾃的产品,但这些产品基本上是实现数据的html 格式输出。

在实际应⽤中,我们经常需要把数据以统计图的形式表现出来,例如股票⾏情曲线图的输出。

传统的⽅法是把统计图作为⼀个图形⽂件放到Web 服务器的⽬录中。

这种做法虽然简单,但有明显的局限性:⼀是图形⽂件要占⽤较⼤存储空间;⼆是难以适应灵活复杂的查询要求;三是图形⽂件随数据库的变化⽽更新,加重了服务器的负担,也容易造成图形和数据库的不⼀致。

显然,要实现上述要求,需要两个关键环节:⼀是从数据库中读出数据;⼆是根据读出的数据在Web 页⾯中绘图。

我们采⽤JdbC 访问数据库,在Web 页⾯中绘图则使⽤Java.awt 包中提供的Graphics 类实现。

为便于表述,建⽴数据表如下:项 ⽬指 标⽔ 产 养 殖60⼯ 程 管 理89抗 旱 防 汛100财 务200办 公 室350勘 测 设 计80我们的⽬标就是把上表⽤统计图表现出来(本⽂⽤⽔平柱状图)。

本⽂中所指数据库均为如上形式的表,其字段1 为字符形字段,表⽰项⽬信息;字段2 为数值形字段(⽤浮点形读出),表⽰指标数。

实际应⽤中,对程序稍作修改,就可使其更加灵活通⽤。

为了绘制各种形式的图表,先定义⼀个Graph 抽象类(注意不是Graphics):import java.sql. *;import java.awt. *;abstract class Graph{int height,width; // 绘图区域的⾼和宽int maxRow=50,row=0;// 可容纳的最⼤记录数和实有记录数Color color=new Color(50,50,200); // 默认绘图颜⾊float scale; // ⽐例尺String[] name; // 项⽬名缓冲区float[] value; // 指标值缓冲区public Graph(Dimension d,int maxRows,Color fColor){height=d.height;width=d.width;name=new String[maxRows];value=new float[maxRows];color=fColor;}public void setResult(ResultSet result){ // 把查询结果读⼊缓冲区try{row=0;while(result.next() &&rowname[row]=result.getString(1);value[row]=result.getFloat(2);row + +;}}catch(Exception ex){System.out.println(“n failure!" +ex.getMessage()); }}// 绘制统计图的抽象⽅法, 在⼦类中实现}在这个类中,定义了图表的⼀般特性,如颜⾊、⽐例尺、记录缓冲区等,并实现了把查询结果置⼊缓冲区的setResult ⽅法。

JAVA报表控件分析

JAVA报表控件分析

JA V A报表分析1报表工具列表2Web报表工具的采购成本一般地,Web报表在一个软件开发项目中占的比例大概是 10% 左右,这两年有上升的趋势,据我现在项目中报表的开发量大的能占到20%。

下面的计算还是以10%为标准,每人月的成本按2.5万计算。

以一个100万的软件开发项目为例,Web报表的工作量占 10% ,即开发成本为 10 万元。

以 2.5 万 / 人月来计算,这个项目需要用 4 个人月来完成报表工作。

在实际的项目中,这 10 万元有几种方式分摊:(1)集成商以前的代码积累+程序员按项目定制。

说白了,就是纯手工编写代码。

这里又分两种情况: A 、是在集成商以前的代码积累基础之上直接按项目定制; B 、找开源的报表软件,在此之上做修改。

这样做能在一定程度上减少程序员的工作量和后期的维护成本,但是开发上要受限于开源软件。

且不论产品资料、函数接口什么的是否齐全,单是开源软件的 bug 问题就够让人挠头的了。

这两种方式不涉及到采用报表软件的成本问题,好处就是开发人员对程序能完全控制,开发成本直观。

坏处就是如果项目报表的要求比较高的话,程序员的工作量会相当大,报表开发效率低,报表的后期维护成本也比较高,只要客户要修改报表,就必须找到开发商,除非事先商量好,否则就会出现钱方面的扯皮。

实际应用中, A、B两种方式主要集中在中小型的项目。

(2)Web报表软件+程序员开发。

用报表软件的好处有很多,象提高开发效率、节省时间、缩短工期、方便后期维护等到,就不多说了。

但是市场上报表软件非常多,如何能选择出既符合项目需要、又能合理控制成本的工具呢?采购报表软件的成本遵循下面这个原则就行:选择的Web报表软件至少能减少 50% 的报表开发工作量,报表的总开发成本降低 1/3 左右。

拿在上面的例子来说:以前做报表需要4个人月,在使用Web报表工具后,应该2个人月就能完成;加上报表软件的采购成本,原来需要10万元才能做完的事情,应该要6、7万元就能做完。

jasperreport%2Bireport开发java报表入门级教程

jasperreport%2Bireport开发java报表入门级教程

特别声明:本文版权为原文作者李克喜所有。

1使用iReport制作报表的详细过程(Windows环境下)1.1前言在网络上可以搜索到很多使用iReport和Jasperreport配合实现各种报表任务的文章,但是我觉得很少有一篇(几乎没有)做一个比较详细的介绍如何使用iReport制作报表的全过程,我所看过的文章的基本思想是覆盖面广,很多内容都是提及即过,并不是开发人员都有时间为每个实践花费时间自己实现,如果能有更详细的资料,那岂不是一件乐事。

出于这个念头促使我写这篇文章,希望能对那些使用iReport和Jasperreport朋友有所帮助,特别是需要亲身去实现报表的朋友,希望能给你们带来一点帮助。

本文不是对iReport的每个细节进行介绍,关于iReport的每个细节可以参考iReport网站的资料,但是可能得花费一些费用。

一般用户没有必要付出这些费用,因为我们关心的是如何制作我们需要的报表,而不是去扩展iReport,比如制作iReport的插件。

1.2准备1.2.1下载JDK1.2.2下载iReport1.2.3准备数据库1.2.4启动MySql服务确定Mysql使用的的字符集是重要的问题,特别是对需要中文报表的朋友,应该特别注意这个问题。

1.2.5确定商务逻辑也就是希望完成什么样的报表任务。

需要实现的报表的详细描述,这是实现报表的业务条件,否则所有的任务绝大部分没有意义。

本文使用一个Bug记录表为例,本文的例子是制作一个根据项目和项目中的模块分组的Bug量统计。

1.3开始配置基本信息1.3.1配置界面使用的语言和报表输出路径第一次进入系统是英文环境,可以通过【Tools】-【Options】开启配置iReport 系统的基本信息对话框。

在“Language”选项里面选择你需要的界面语言,比如“中文-中国”。

点击【Apply】按钮,系统既把整个界面中文化。

在配置iReport系统的基本信息对话框中选择【编译】Label,之后决定你的报表输出路径,可以把“编译在报表数据文件夹”选择打勾,这样报表的jrxml 文件和jasper文件就放置同一文件夹。

java输出表格

java输出表格

竭诚为您提供优质文档/双击可除java输出表格篇一:java导出报表exceljava导出excel表格20xx-06-0111:03:56作者:zhuangjixiang收藏我要投稿[java]之前做项目的时候需要数据库导出excel格式,由于项目赶没完成,现在分享下如何用java导出excel。

话不多说案例如下:之前做项目的时候需要数据库导出excel格式,由于项目赶没完成,现在分享下如何用java导出excel。

话不多说案例如下:首先要做的是导入一个jxl的包,网上很多。

首先是不连接数据库数据[java]packagejxltest;importjava.io.Fileoutputstream;importjava.io.outputstream;importjava.text.simpledateFormat; importjava.util.arraylist; importjava.util.date; importjava.util.list;importjxl.*;importjxl.format.alignment; importjxl.format.border; importjxl.format.borderlinestyle; importjxl.format.cellFormat; importjxl.write.boolean; bel;importjxl.write.number; importjxl.write.writablecellFormat; importjxl.write.writableFont; importjxl.write.writablesheet; importjxl.write.writableworkbook; publicclassjxlexample{/***数据库导出至excel表格*/publicstaticvoidmain(string[]args){ //准备设置excel工作表的标题string[]title={"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};try{//获得开始时间longstart=system.currenttimemillis();//输出的excel的路径stringfilepath="e:\\testjxl.xls";//创建excel工作薄writableworkbookwwb;//新建立一个jxl文件,即在e盘下生成testjxl.xlsoutputstreamos=newFileoutputstream(filepath);wwb=workbook.createworkbook(os);//添加第一个工作表并设置第一个sheet的名字writablesheetsheet=wwb.createsheet("产品清单",0);labellabel;for(inti=0;i //label(x,y,z)代表单元格的第x+1列,第y+1行,内容z//在label对象的子对象中指明单元格的位置和内容label=newlabel(i,0,title[i]);//将定义好的单元格添加到工作表中sheet.addcell(label);}//下面是填充数据/**保存数字到单元格,需要使用jxl.write.number*必须使用其完整路径,否则会出现错误**///填充产品编号jxl.write.numbernumber=newjxl.write.number(0,1,20xx 1001);sheet.addcell(number);//填充产品名称label=newlabel(1,1,"金鸽瓜子");sheet.addcell(label);/**定义对于显示金额的公共格式*jxl会自动实现四舍五入*例如2.456会被格式化为 2.46,2.454会被格式化为2.45**/jxl.write.numberFormatnf=newjxl.write.numberFormat("#.##");jxl.write.writablecellFormatwcf=newjxl.write.writab lecellFormat(nf);//填充产品价格jxl.write.numbernb=newjxl.write.number(2,1,2.45,wcf);sheet.addcell(nb);//填充产品数量jxl.write.numbernumb=newjxl.write.number(3,1,200);sheet.addcell(numb);/**定义显示日期的公共格式*如:yyyy-mm-ddhh:mm**/simpledateFormatsdf=newsimpledateFormat("yyyy-mm-dd ");stringnewdate=sdf.format(newdate());//填充出产日期label=newlabel(4,1,newdate);sheet.addcell(label);//填充产地label=newlabel(5,1,"陕西西安");sheet.addcell(label);/**显示布尔值**/jxl.write.booleanbool=newjxl.write.boolean(6,1,true);sheet.addcell(bool);/**合并单元格*通过writablesheet.mergecells(intx,inty,intm,intn);来实现的*表示将从第x+1列,y+1行到m+1列,n+1行合并***/sheet.mergecells(0,3,2,3);label=newlabel(0,3,"合并了三个单元格");packagejxltest;importjava.io.Fileoutputstream;importjava.io.outputstream; importjava.text.simpledateFormat; importjava.util.arraylist; importjava.util.date; importjava.util.list;importjxl.*;importjxl.format.alignment; importjxl.format.border; importjxl.format.borderlinestyle; importjxl.format.cellFormat; importjxl.write.boolean; bel;importjxl.write.number; importjxl.write.writablecellFormat; importjxl.write.writableFont; importjxl.write.writablesheet; importjxl.write.writableworkbook; publicclassjxlexample{/***数据库导出至excel表格*/publicstaticvoidmain(string[]args){//准备设置excel工作表的标题string[]title={"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};try{//获得开始时间longstart=system.currenttimemillis();//输出的excel的路径stringfilepath="e:\\testjxl.xls";//创建excel工作薄writableworkbookwwb;//新建立一个jxl文件,即在e盘下生成testjxl.xlsoutputstreamos=newFileoutputstream(filepath);wwb=workbook.createworkbook(os);//添加第一个工作表并设置第一个sheet的名字writablesheetsheet=wwb.createsheet("产品清单",0);labellabel;for(inti=0;i //label(x,y,z)代表单元格的第x+1列,第y+1行,内容z//在label对象的子对象中指明单元格的位置和内容label=newlabel(i,0,title[i]);//将定义好的单元格添加到工作表中sheet.addcell(label);}//下面是填充数据/**保存数字到单元格,需要使用jxl.write.number*必须使用其完整路径,否则会出现错误**///填充产品编号jxl.write.numbernumber=newjxl.write.number(0,1,20xx 1001);sheet.addcell(number);//填充产品名称label=newlabel(1,1,"金鸽瓜子");sheet.addcell(label);/**定义对于显示金额的公共格式*jxl会自动实现四舍五入*例如2.456会被格式化为 2.46,2.454会被格式化为2.45**/jxl.write.numberFormatnf=newjxl.write.numberFormat("#.##");jxl.write.writablecellFormatwcf=newjxl.write.writab lecellFormat(nf);//填充产品价格jxl.write.numbernb=newjxl.write.number(2,1,2.45,wcf);sheet.addcell(nb);//填充产品数量jxl.write.numbernumb=newjxl.write.number(3,1,200);sheet.addcell(numb);/**定义显示日期的公共格式*如:yyyy-mm-ddhh:mm**/simpledateFormatsdf=newsimpledateFormat("yyyy-mm-dd ");stringnewdate=sdf.format(newdate());//填充出产日期label=newlabel(4,1,newdate);sheet.addcell(label);//填充产地label=newlabel(5,1,"陕西西安");sheet.addcell(label);/**显示布尔值**/jxl.write.booleanbool=newjxl.write.boolean(6,1,true);sheet.addcell(bool);/**合并单元格*通过writablesheet.mergecells(intx,inty,intm,intn);来实现的*表示将从第x+1列,y+1行到m+1列,n+1行合并***/sheet.mergecells(0,3,2,3);label=newlabel(0,3,"合并了三个单元格");[java]viewplaincopyprintsheet.addcell(label);***定义公共字体格式*通过获取一个字体的样式来作为模板篇二:java实现生成pdF(包含文字,表格,图片) 需要的lib:itext-2.1.7.jaritextasian.jarpackagecom.demo.test;importjava.awt.color;importjava.io.File;importjava.io.Fileoutputstream;importcom.lowagie.text.chunk;importcom.lowagie.text.document;importcom.lowagie.text.Font;importcom.lowagie.text.chapter;importcom.lowagie.text.element;importcom.lowagie.text.image;importcom.lowagie.text.pagesize;importcom.lowagie.text.paragraph;importcom.lowagie.text.phrase;importcom.lowagie.text.pdf.baseFont;importcom.lowagie.text.pdf.pdfpcell;importcom.lowagie.text.pdf.pdfptable;importcom.lowagie.text.pdf.pdfwriter;/***生成pdF文件**@authorsmile*qq:1963938311**/publicclasspdFdemo{privatecolorblack=newcolor(0,0,0);//黑色privatecolorred=newcolor(255,0,0);//红色privatecolorblue=newcolor(0,0,255);//蓝色privateintbold=Font.bold;//粗体privateintnormal=Font.noRmal;//正常字体privateintitalic=Font.italic;//斜体privateintbolditalic=Font.bolditalic;//粗斜体privatefloatsetting=100;//首行缩进参数publicdocumentcreatedoc(stringfilename)throwsexception{。

报表引擎 选型java

报表引擎 选型java

报表引擎选型java全文共四篇示例,供读者参考第一篇示例:报表引擎在企业信息化建设中起着至关重要的作用,它可以帮助企业快速生成各种形式的报表,帮助决策者更好地了解企业的运营状况,从而做出更明智的决策。

在选择报表引擎时,很多企业都会选择Java作为开发语言,因为Java具有跨平台性、稳定性和性能优势等特点。

接下来我将介绍一些在选型Java报表引擎时需要考虑的因素,以及市场上比较流行的报表引擎产品。

我们来看一些选型报表引擎时需要考虑的因素:1. 功能全面性:报表引擎需要支持各种数据源(如数据库、文件或API等),丰富的报表样式模板,并且具有灵活的数据展示和分析功能。

2. 易用性:报表引擎需要提供直观的报表设计器,让普通用户也能够快速上手,生成自己需要的报表。

3. 扩展性:报表引擎需要支持插件机制或者API,方便开发人员进行二次开发和定制化。

4. 性能和稳定性:报表引擎需要具有高性能和稳定性,能够稳定运行在各种复杂的环境中。

5. 文档和技术支持:报表引擎的文档和技术支持要健全,方便开发人员进行学习和使用。

在市场上,有很多报表引擎产品可以选择,比如JasperReports、BIRT(Business Intelligence and Reporting Tools)、iReport、Pentaho Report Designer等。

下面我将介绍其中几款在Java报表引擎领域比较流行的产品:1. JasperReports:JasperReports是一个优秀的开源报表引擎,它基于Java语言开发,支持多种数据源,包括数据库、XML、JavaBean等。

JasperReports提供了强大的报表设计器iReport,可以帮助用户快速设计出各种样式的报表。

JasperReports还支持扩展性和跨平台性,广泛应用于各个行业的企业信息化建设中。

2. BIRT(Business Intelligence and Reporting Tools):BIRT是一个由Eclipse基金会开发的开源报表工具,也是一款非常流行的Java报表引擎。

java 自定义报表设计思路

java 自定义报表设计思路

一、概述在软件开发中,报表是一个非常重要的功能模块,它可以帮助用户将数据以直观、清晰的形式展示出来,为用户提供决策支持。

而在Java 开发中,我们经常会遇到需要自定义报表的情况,因此掌握java自定义报表的设计思路是非常重要的。

二、需求分析在设计自定义报表之前,我们首先需要明确用户的需求。

用户需要从报表中获取哪些数据?他们对数据的展示有什么特殊的需求?是否需要支持导出报表的功能?这些问题都需要在需求分析阶段得到明确的答案。

三、选择合适的报表工具在Java开发中,有许多成熟的报表工具可以选择,比如JasperReports、BIRT、iReport等。

我们需要根据项目的实际需求和技术栈选择合适的报表工具。

一般来说,JasperReports是一个比较常用的报表工具,它提供了丰富的报表设计功能和灵活的报表模板。

我们可以选择JasperReports作为自定义报表的开发工具。

四、数据准备在设计自定义报表时,我们需要充分考虑数据的来源和查询方式。

数据可能来源于数据库、API接口,甚至是用户手动输入。

我们需要明确数据的格式、结构和获取方式,同时要考虑如何处理数据异常和错误。

在数据准备阶段,我们需要编写SQL语句或者调用API接口来获取数据,并对数据进行合理的处理和加工。

五、报表设计一般来说,报表设计可以分为两部分,即数据源设计和报表模板设计。

在数据源设计阶段,我们需要将数据源与报表工具进行绑定,确保报表能够获取到正确的数据。

而在报表模板设计阶段,我们需要根据用户的需求和数据特点,设计出合适的报表模板。

报表模板可以包括表格、图表、图片等多种元素,通过合理的排版和样式设置,使报表呈现出清晰美观的效果。

六、报表功能实现除了展示数据外,报表还可能需要支持一些特殊的功能,比如导出报表、打印报表、打包报表等。

在实现这些功能时,我们需要根据报表工具提供的API和文档,编写代码来实现相应的功能。

我们还需要考虑报表的性能和稳定性,确保报表能够在大数据量和复杂场景下正常运行。

报表引擎 选型java

报表引擎 选型java

报表引擎选型java选择报表引擎时,考虑到你使用Java语言,可以考虑以下几个方面来进行选型。

首先,你可以考虑报表引擎的功能和性能。

一个好的报表引擎应该能够支持各种数据源,提供丰富的图表和报表样式,以及灵活的定制功能。

其次,考虑报表引擎的易用性和集成性。

一个易用的报表引擎可以让开发人员快速上手,提高开发效率;而集成性则关系到报表引擎与现有系统的无缝对接。

再者,考虑报表引擎的社区支持和文档完善程度。

一个有活跃社区支持的报表引擎,可以让你在使用过程中获得及时的帮助和解决问题的支持;而完善的文档则可以让你更好地了解和使用报表引擎的各项功能。

在Java领域,一些常见的报表引擎包括JasperReports、BIRT (Business Intelligence and Reporting Tools)、Apache POI等。

JasperReports是一个流行的开源报表引擎,它提供了丰富的报表设计工具和灵活的报表生成功能,支持多种数据源和报表输出格式,而且有一个活跃的社区和完善的文档支持。

BIRT是Eclipse基金会的一个开源项目,它提供了强大的报表设计和生成功能,支持多种数据源和报表样式,而且可以与Eclipse集成,适合在Eclipse开发环境下进行报表设计和开发。

Apache POI则是一个用于读写Microsoft Office格式文件的Java库,它可以帮助你在Java程序中生成Excel格式的报表。

综上所述,选择报表引擎时,可以综合考虑功能、性能、易用性、集成性、社区支持和文档完善程度等方面的因素,结合具体的项目需求和开发环境来进行选型。

希望这些信息能够帮助你进行合适的报表引擎选型。

xdocreport 循环表格

xdocreport 循环表格

XDocReport 是一个流行的 Java 应用程序库,可用于生成和编辑各种格式的文档,包括docx、odt 和pdf等。

它具有强大的功能,如循环表格,使得在生成复杂文档时非常方便和灵活。

在 XDocReport 中,循环表格是一种非常重要的功能,它允许用户以编程的方式动态地向表格中添加数据,从而实现根据数据动态生成表格内容的功能。

下面将详细介绍如何在XDocReport 中使用循环表格。

1. 引入 XDocReport 库需要将 XDocReport 库引入到项目中。

可以从官方全球信息湾上下载最新的 XDocReport 版本,然后将对应的 jar 文件添加到项目的classpath 中。

2. 创建模板文件接下来,需要创建一个包含循环表格的模板文件。

可以使用Microsoft Word 或 OpenOffice Writer 等工具创建一个包含表格的文档,并将其保存为模板文件,格式可以是docx、odt等。

3. 定义模板变量在模板文件中,需要定义循环表格的标记,通过定义模板变量来实现。

可以使用 Freemarker 或 Velocity 等模板引擎的语法来定义循环表格的标记,例如:```xml<#list data as item><tr><td>${}</td><td>${item.value}</td></tr></#list>```在这个例子中,`data` 是一个包含表格数据的集合,通过循环遍历该集合来动态生成表格行。

4. 使用 XDocReport API 填充数据在应用程序中,通过 XDocReport 的 API 来填充模板数据。

首先需要加载模板文件,然后将数据填充到模板中,并最终生成最终的文档。

```javaIXDocReport report = XDocReport.loadReport(inputStream, TemplateEngineKind.Freemarker);IContext context = report.createContext();context.put("data", dataList);report.process(context, outputStream);```在这个例子中,`dataList` 是一个包含表格数据的集合,通过将该集合放入上下文中,然后调用 `process` 方法来生成最终的文档。

Java水晶报表

Java水晶报表

报表开ቤተ መጻሕፍቲ ባይዱ示例
CRConfig.xml
Installer Path\Business Objects\Common\4.0\java <Classpath>E:\Program Files\Business Objects\Common\4.0\java/lib/crlovmanifest.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRLOVExternal.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBJDBCServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBXMLServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBJavaBeansServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/external/CRDBXMLExternal.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/external/log4j.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBSForceServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/external/CRDBSForceExternal.jar;E:\oracle\ora921\jdbc \lib\ojdbc14.jar;E:\oracle\ora921\jdbc\lib\classes12.jar;${CLASSPATH} </Classpath> <JDBCURL>jdbc:oracle:thin:@HostName:Port:SID</JDBCURL> <JDBCClassName>oracle.jdbc.driver.OracleDriver</JDBCClassName> <JDBCUserName>scott</JDBCUserName>

Java根据模板导出Excel报表并复制模板生成多个Sheet页

Java根据模板导出Excel报表并复制模板生成多个Sheet页

Java根据模板导出Excel报表并复制模板⽣成多个Sheet页因为最近⽤报表导出⽐较多,所有就提成了⼀个⼯具类,本⼯具类使⽤的场景为根据提供的模板来导出Excel报表并且可根据提供的模板Sheet页进⾏复制从⽽实现多个Sheet页的需求,使⽤本⼯具类时,如果需求是每个Sheet页中的数据都不⼀致,但是表格样式和模板都⼀样那么只需要在实际情况中根据 sql 来查询要添加的数据源 (只需更改数据源即可)采⽤的技术为 POI 导出,因为类的缘故,⽬前只⽀持2003版本的Excel.使⽤前请先下载相应jar包!后期有时间的话会进⾏进⼀步完善,初次写⼯具类,若有不完善的地⽅还请包涵!先看看模板样式和运⾏结果,然后直接上代码这是Excel的模板样式这是导出结果具体实现看demopackage com.sgcc.xyz.util;import java.io.File;import java.io.FileInputStream;import java.io.OutputStream;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletResponse;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hssf.util.HSSFColor;import org.apache.poi.hssf.util.Region;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import com.sgcc.uap.persistence.impl.HibernateDaoImpl;/*** 报表导出⼯具类** @author JYLiu@巴黎的⾬季本⼯具是根据POI对Excel2003进⾏报表导出本⼯具类可根据模板进⾏Excel的导出* 并且可根据提供的模板Sheet页进⾏复制从⽽实现多个Sheet页的需求* 使⽤本⼯具类时,如果需求是每个Sheet页中的数据都不⼀致,但是表格样式和模板都⼀样* 那么只需要在实际情况中根据 sql 来查询要添加的数据源 (只需更改数据源即可)*/public class ExcelUtil {/*** 根据模板导出报表,可导出多个Sheet页** @param 导出的Excel⽂件名* @param 模板路径 (全路径)* @param 数据源* @param 返回请求* @param ⽣成的Sheet页的名称集合* @param 数据源中Map集合的key值 (key值对应的value值顺序要列名顺序⼀致)* @param 开始循环写⼊数据的⾏数(从第⼏⾏开始写⼊数据)*/public static void ExcelByModel(String ExcelName, String ModelURl, List<Map<String, String>> dataSource, HttpServletResponse response, String[] sheetNames, String[] keyNames, int rowNum) throws Exception { // 设置导出Excel报表的导出形式response.setContentType("application/vnd.ms-excel");// 设置导出Excel报表的响应⽂件名String fileName = new String(ExcelName.getBytes("utf-8"), "ISO-8859-1");response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");// 创建⼀个输出流OutputStream fileOut = response.getOutputStream();// 读取模板⽂件路径File file = new File(ModelURl);FileInputStream fins = new FileInputStream(file);POIFSFileSystem fs = new POIFSFileSystem(fins);// 读取Excel模板HSSFWorkbook wb = new HSSFWorkbook(fs);// 设置边框样式HSSFCellStyle style = wb.createCellStyle();style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 设置边框样式的颜⾊style.setBottomBorderColor(HSSFColor.BLACK.index);style.setLeftBorderColor(HSSFColor.BLACK.index);style.setRightBorderColor(HSSFColor.BLACK.index);style.setTopBorderColor(HSSFColor.BLACK.index);// 模板页HSSFSheet sheetModel = null;// 新建的Sheet页HSSFSheet newSheet = null;// 创建⾏HSSFRow row = null;// 创建列HSSFCell cell = null;// 循环建⽴Sheet页for (int i = 0; i < sheetNames.length; i++) {// 读取模板中模板Sheet页中的内容sheetModel = wb.getSheetAt(0);// 设置新建Sheet的页名newSheet = wb.createSheet(sheetNames[i]);// 将模板中的内容复制到新建的Sheet页中copySheet(wb, sheetModel, newSheet, sheetModel.getFirstRowNum(), sheetModel.getLastRowNum());//获取到新建Sheet页中的第⼀⾏为其中的列赋值row=newSheet.getRow(0);row.getCell(1).setCellValue("这是为表代码赋的值");//注意合并的单元格也要按照合并前的格数来算row.getCell(6).setCellValue("这是为外部代码赋的值");//获取模板中的第⼆列,并赋值row=newSheet.getRow(1);row.getCell(1).setCellValue("表名称赋值");//注意合并的单元格也要按照合并前的格数来算row.getCell(6).setCellValue("这是为是否系统表赋的值");// 遍历数据源开始写⼊数据(因为Excel中是从0开始,所以减⼀)int num = rowNum - 1;for (Map<String, String> item : dataSource) {// 循环遍历,新建⾏row = newSheet.createRow((short) num);//判断有多少列数据for (int j = 0; j < keyNames.length; j++) {// 设置每列的数据设置每列的样式设置每列的值cell = row.createCell(j); cell.setCellStyle(style); cell.setCellValue(item.get(keyNames[j]));}num++;}// break 加break可以测试只添加⼀个Sheet页的情况}// 写⼊流wb.write(fileOut);// 关闭流fileOut.close();}/**** @param Excel⼯作簿对象* @param 模板Sheet页* @param 新建Sheet页* @param 模板页的第⼀⾏* @param 模板页的最后⼀⾏*/private static void copySheet(HSSFWorkbook wb, HSSFSheet fromsheet, HSSFSheet newSheet, int firstrow, int lasttrow) { // 复制⼀个单元格样式到新建单元格if ((firstrow == -1) || (lasttrow == -1) || lasttrow < firstrow) {return;}// 复制合并的单元格Region region = null;for (int i = 0; i < fromsheet.getNumMergedRegions(); i++) {region = fromsheet.getMergedRegionAt(i);if ((region.getRowFrom() >= firstrow) && (region.getRowTo() <= lasttrow)) {newSheet.addMergedRegion(region);}}HSSFRow fromRow = null;HSSFRow newRow = null;HSSFCell newCell = null;HSSFCell fromCell = null;// 设置列宽for (int i = firstrow; i < lasttrow; i++) {fromRow = fromsheet.getRow(i);if (fromRow != null) {for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {int colnum = fromsheet.getColumnWidth((short) j);if (colnum > 100) {newSheet.setColumnWidth((short) j, (short) colnum);}if (colnum == 0) {newSheet.setColumnHidden((short) j, true);} else {newSheet.setColumnHidden((short) j, false);}}break;}}// 复制⾏并填充数据for (int i = 0; i < lasttrow; i++) {fromRow = fromsheet.getRow(i);if (fromRow == null) {continue;}newRow = newSheet.createRow(i - firstrow);newRow.setHeight(fromRow.getHeight());for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) {fromCell = fromRow.getCell((short) j);if (fromCell == null) {continue;}newCell = newRow.createCell((short) j);newCell.setCellStyle(fromCell.getCellStyle());int cType = fromCell.getCellType();newCell.setCellType(cType);switch (cType) {case HSSFCell.CELL_TYPE_STRING:newCell.setCellValue(fromCell.getRichStringCellValue());break;case HSSFCell.CELL_TYPE_NUMERIC:newCell.setCellValue(fromCell.getNumericCellValue());break;case HSSFCell.CELL_TYPE_FORMULA:newCell.setCellValue(fromCell.getCellFormula());break;case HSSFCell.CELL_TYPE_BOOLEAN:newCell.setCellValue(fromCell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_ERROR:newCell.setCellValue(fromCell.getErrorCellValue());break;default:newCell.setCellValue(fromCell.getRichStringCellValue());break;}}}}}以上便是整个⼯具类的核⼼代码了测试数据如下/*** 测试多Sheet页导出数据表格⽅法*/public static void ExcelTest(HttpServletResponse response){//构建数据源List<Map<String, String>> dataSourceList=new ArrayList<Map<String,String>>(){ {add(new HashMap<String, String>(){{put("字段编号", "1");put("字段代码", "BUSINESS_ID");put("字段含义", "业务id");put("数据类型", "VARCHAR");put("长度", "64");put("主键", "是");put("主码", "");}});add(new HashMap<String, String>(){{put("字段编号", "2");put("字段代码", "PROC_INST_ID");put("字段含义", "流程实例编号");put("数据类型", "VARCHAR");put("长度", "64");put("主键", "");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "3");put("字段代码", "PROC_STATE");put("字段含义", "流程状态");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "4");put("字段代码", "APPLICANT");put("字段含义", "申请⼈");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "5");put("字段代码", "LEAVE_TYPE");put("字段含义", "请假类型");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "6");put("字段代码", "REASON");put("字段含义", "请假事因");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "7");put("字段代码", "BEGIN_TIME");put("字段含义", "起始时间");put("数据类型", "TIMESTAMP");put("长度", "");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "8");put("字段代码", "END_TIME");put("字段含义", "结束时间");put("数据类型", "TIMESTAMP");put("长度", "");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "9");put("字段代码", "INSERT_PERSON");put("字段含义", "登记⼈");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});add(new HashMap<String, String>(){{put("字段编号", "10");put("字段代码", "APPROVEDBY");put("字段含义", "批准⼈");put("数据类型", "VARCHAR");put("长度", "64");put("主键", " ");put("主码", " ");}});}};//构建数据源中的key值String[] keysStrings={"字段编号","字段代码","字段含义","数据类型","长度","主键","主码"};//每页的名称String [] sheetNameStrings={"Sheet1","Sheet2","Sheet3","Sheet4","Sheet5","Sheet6"};String modelURLString="D:\\model\\model.xls";try {ExcelUtil.ExcelByModel("测试模板导出", modelURLString, dataSourceList, response, sheetNameStrings, keysStrings, 6);} catch (Exception e) {e.printStackTrace();}}以上就是关于Excel报表根据模板导出并⽣成多个Sheet也的⼩⼯具了,需要的可以参考代码,根据实际业务需求进⾏代码调整。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java报表工具,首先可以分成两大类:纯Java报表工具,和支持Java的报表工具。

支持Java的报表工具:
我们所说的”支持”Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用.这样的产品很多,总的讲一大类是采用独立报表服务器的,如Bo/Crystal Report,Brio,Cognos,和勤等;另一大类是在前端有控件的,如数巨报表等。

纯Java报表工具
纯Java的报表工具,就是用java语言编写的报表工具,包括报表引擎、内核、设计器界面、操作等。

主要的有:Style Report,Jasper Report,birt报表,FineReport,ireport,杰表等
JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE 报表工具一样来制作报表。

JasperReports 支持PDF、HTML、XLS、CSV和XML文件输出格式。

JasperReports是当前Java开发者最常用的报表工具。

iReport+jasperReports制作WEB报表
2007-06-11 17:11:36| 分类:J2EE技术| 标签:java 技术|字号大中小订阅
[声明]内容部分摘自网上,感谢网友共享
第一部分:环境配置
一、JDK、WEB服务器及数据库的安装与配置
(此处略,本文测试环境JDK1.5、Resin2.1.7、SQLServer2K)
二、IReport的安装
下载地址
目前最新版本1.3.3
包中已经包含iText-1.3.1.jar和jasperreports-1.3.3.jar
下载报表中文支持包iTextAsian.jar下载地址(注:需注册)
将下载的IReport解压至任意目录,如D:\iReport-1.3.3将iTextAsian.jar添加至lib 目录下
执行iReport.bat或者iReport.exe均可启动iReport
第二部分:IReport使用简介
JasperReports可以理解为一个编译器或者解析器。

用户通过IReport或者使用文本编辑器设计报表,其编码格式要符合jasperreports.dtd的标签和属性定义的XML编码格式。

使用此XML文件,用户可以定义整个报表,描述哪里放置文本框、图形、怎样存取数据,怎样计算列值,如何显示等等,JasperReports工作原理如图:
XML源文件必须被编译后产生一个文件后缀为“.jasper”的报表文件,由JRDataSource提供数据对报表文件进行填充,现在有了数据加上jasper文件,就可以生成打印报表。

即:A datasource + a jasper file = a print
IReport是一个制作JasperReport XML文件的可视化设计工具。

以下是其使用时的简单说明:
一、系统选项配置Options|选项,以下为注意的配置点
二、数据源设置:Data|连接/资料来源,选择New,DataBase JDBC connection
注:请先将JDBC包放置于目录lib下,否则不能显示您数据库的Driver;也可以在options|Classpath中进行JAR包的添加
三、主要使用的工具栏简介
四、Band详解
五、报表参数说明
系统默认变量
$V{PAGE_NUMBER}代表当前页数(可以是页码也可以是页数,通过TextField的计算时间的不同值来设置)
$V{PAGE_COUNT}当前页面中记录的数目
$V{groupname_COUNT}代表当前组的记录数
$V{COLUMN_NUMBER}列号码
$V{COLUMN_COUNT}当前列中记录的数目(是当前页里行的序号,在新页上会重置为1)
$V{REPORT_COUNT}当前文档中数据源记录数目
六、如果以PDF输出,元素字体设置如下
--------------------注:没有时间写,以下内容从简------------------------第三部分:简单示例
一、使用档案|报表精灵
1. 注意选择连接/资料来源(即数据源),在SQL query中填写报表查询语句
2. 依据您的查询语句选择列出来要显示的字段名
3. 分组字段的选择,可以选择三个,注意如果选择分组字段,SQL语句应加上相应的order by
4. 选择报表布局
参考/swf/Report_Wizard_viewlet_swf.htm
二、报表参数设置
参考/swf/Parameters_viewlet_swf.htm
三、子报表
参考/swf/Subreport_viewlet_swf.htm
(注:视频中子报表参数前要加P,视频没有添加)
四、分组报表
参考/swf/Groups_viewlet_swf.htm
注:点击下载所有视频
/sf/docman/do/downloadDocument/projects.ireport/docman.root/d oc1021
第四部分:WEB使用示例
需要添加的包(在IReport目录lib下可以找到):
commons-beanutils-1.7.jar
commons-collections-2.1.jar
commons-digester-1.7.jar
commons-logging-1.0.2.jar
itext-1.3.1.jar
iTextAsian.jar
jasperreports-1.3.3.jar
一、胖客户端方式,代码如下
String xmlFileName = System.getProperty("user.dir")+"\\test_report.jrxml";
String jasperFileName = System.getProperty("user.dir")+"\\test_report.jasper";
String printFileName = System.getProperty("user.dir")+"\\test_report.jrprint";
try {
/* 编译报表文件.jrxml,生成文件.jasper */
pileReportToFile(xmlFileName);
/* 设置参数*/
HashMap params = new HashMap(); //建立参数表
params.put("yourParamName",""); //设置参数值
Connection cnn = getConnection(); //自己添加得到数据库连接的函数
/*填充报表文件.jasper,生成文件.jrPrint*/
JasperFillManager.fillReportToFile(jasperFileName,params,cnn); //用数据填充报表
/* 预览报表文件.jrprint */
File sourceFile = new File(printFileName);
JasperPrint jasperPrint = (JasperPrint)JRLoader.loadObject(sourceFile); //生成报表结果
JasperViewer.viewReport(jasperPrint); //预览报表
freeConnection(cnn); //自己添加释放数据库连接的函数
} catch (JRException e){
e.printStackTrace();
}
二、JSP访问方式
boolean isOK = true; //判断是否成功
try {
//第一步:装载jasper文件
File jasperFileName = new File(request.getRealPath("/Reports/test_report.jasper"));
//第二步:设置参数值
HashMap params = new HashMap();
params.put("yourParamName",""); //设置参数值
//第三步:利用JasperRunManager生成PDF文件
ConnectionPool connMgr = ConnectionPool.getInstance();
Connection conn = connMgr.getConnection();
JasperRunManager.runReportToPdfFile(jasperFileName.getPath(),paramete rs,conn);
}catch(Exception ex){
isOK = false;
}
//以下只需要访问/Reports/test_report.pdf页面即可。

相关文档
最新文档