论文发表指导_期刊投稿推荐_期刊论文发表咨询_职称驿站

论文发表指导,期刊推荐,国际出版

职称驿站学术导航
关闭职称驿站导航

论文发表职称晋升 全方位咨询服务

学术出版,国际教著,国际期刊,SCI,SSCI,EI,SCOPUS,A&HCI等高端学术咨询

Java技术中Excel报表的应用研究

来源:职称驿站所属分类:计算机应用论文
发布时间:浏览:148次

  摘要:许多机构都使用微软Excel表格作为信息交换的方式,众多的非专业编程人员、商业分析师和项目经理都能熟练的运用该技术。而使用Java从Excel文档中分析、搜集、巩固数据的能力则证明是很有用途的。JakartaPOI(PoorObfuscationImplementation,无困惑实现)使得程序员能够迅速完成这些任务。POI可以用来完成在纯Java中处理基于微软OLE(对象链接和嵌入)技术的文件格式到复合文档格式(如MicrosoftExcel,MicrosoftWord等软件使用的格式)的交换。本文对POI进行了剖析并说明了如何使用Java读写MicrosoftExcel文档,还提供了一个使用POI的实例。
关键词:报表;Java;Excel;POI
1引言
微软在系统桌面上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。然而在要求更高的服务器领域,微软本身的产品移植性不好,性能不佳。在我们实际的开发中,表现层的解决方案虽然有多样,但是IE浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中,常常有客户这样的要求:你要把我们的报表直接用Excel打开。或者是:我们已经习惯用Excel打印。这就看程序员能否为用户提供一个便利的编辑打印Excel报表的功能。对此如果用.net开发是没有问题的,但是有J2ee这个比.net更有前途的开放式的开发环境,难道我为了解决打印的要求去另写客户端的控件?或者在服务器端使用本地代码?前者的问题是关键数据的处理有时候不能在客户端做,后者的问题是牺牲了代码的可移植性和稳定性。如果让客户端只负责处理生成好的报表,那将是一种良好的选择。这就面临着新的挑战——即利用Excel的强大功能对报表进行再编辑润色。
2Java及其主要特点
Java是大家所熟悉的,它起源于80年代的中末期,仿效C和C++那样设计出一种更简单、更有效、更容易使用的跨多种计算机平台(硬件、操作系统等),可移植的通用语言。其特点主要有以下几个方面:(1)通用性:指的是跨平台、跨网络、跨语种和跨时间。(2)可移植性:Java的源代码是可移植的,而且对现有的几乎所有操作系统无须修改便能运行。(3)支持分布式环境。(4)Java虚拟机(JVM):这是一种软CPU,是Java环境最重要的组件,它是仿照一种小巧高效的CPU设计的,Java的编译器就是把Java的源代码编译成VM可执行的伪目标代码,而伪目标代码转换成实际的硬件调用。(5)Java本身就是一种虚拟操作系统和图形用户界面(GUI),它们也是可移植的。
3Java与Excel
使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet中创建一个CSV(commaseparatedvalues)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件。这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件。在这里我们主要提到有两种开源项目即:JavaExcel和POI,使用它们大家就可以方便地操纵Excel文件。JavaExcel这个开放源项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API,非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。另一种为了实现纯Java的Excel解决方案是ApacheJakara推出了一个免费的开源项目POI。POI目前已比较成熟,可以处理MSExcel(97-2002)对象。国内已经有部分公司在他们的办公自动化等Web项目中使用POI了。
4POI包在WEB开发中的应用
如果要开发Eclipse插件式的信息应用系统,就肯定会涉及报表输出。在开发中我们将报表输出成Excel,这样用户就可以利用Excel的强大的功能对报表再编辑润色。
在Eclipse中,要和MSOffice交互需要用一个第三方库:即POI。它可以用于任何Java程序中(包括Web程序),而不仅仅是Eclipse。POI不是Eclipse的插件,而是几个JAR包,其知识与插件无关。
4.1安装与初始配置
POI可以到网站下载,经两次解压后将其复制Eclipse的myplugin2项目的根目录下,紧接着要在Eclipse中设置对POI-2.5.1-final-20040804.jar的库引用。需要注意的是:如果在插件项目中演示了第三方包,还必须在plugin.xml文件的<runtime>项中加入对此包的引用:代码如下:
<runtime>
......
<libraryname="libPOI-2.5.1-final-20040804.jar"/>
</runtime>
如果系统中有几种JRE,那么必须确保正确设置PATH环境变量,以调用1.4.2或更新版本的JRE,而非老版本的JRE。环境设置基本上就是两个环境变量的设置:PATH和CLASSPATH。首先要正确设置CLASSPATH,以利用提供数据库访问和Excel电子表格功能的API。使用run.bat文件设置这一变量,这样就可以访问相应的Java文档(.jar文件)。
4.2创建一个空白的Excel文件
因为POI是通用于Java程序的API库,所以使用它并不需要在SWT/JFace或插件环境下,我们创建一个最普通的Java应用程序即可。程序代码如下:
//-----文件名:ExcelSample.java-----
publicclassExcelSample1{
publicstaticVoidmain(String[]args)throwsIOException{
//创建一个excel文件
HSSFWorkbooksb=newHSSFWorkbook();
FileOutputStreamfileOut=newFileOutputStream("c:workbook.xls");
wb.write(fileOut);
fileOut.close();
}
}
说明:
(1)FileOutStream创建和wb.write语句都需要用作异常处理,本例是选择在main方法抛出其异常。
(2)FileOutStream属于JDK的数据流对象,通过它来将一个名为workbook.xls文件创建在C盘目录下,运行该程序可看到C盘根目录下多了一个Excel文件。[!--empirenews.page--]
(3)如果将程序中的FileOutputStream("c:workbook.xls')参数改为名为"workbook.xls",则文件会创建在项目根目录。
4.3往Excel单元格中写入信息
POI把Excel分解成如图2所示的对象结构。四个对象的创建是互相依赖的,自顶向下的关系是:工作簿(HSSFWorkbook)—>表格(HSSFSheet)—>表格行(HSSFRow)—>单元格(HSSFCell)。


图2POI的Excel对象结构
在Excel创建了四个单元格,并将类型不同的值写入各单元格,代码如下(仅给出main方法)。
//-----文件名:ExcelSample2.java-----
publicstaticVoidmain(String[]args)throwsIOException{
/*
*在工作簿里上创建一个sheet,在sheet里创建一行,参数为行号(第二行)
*/
HSSFWorkbookwb=newHSSFWorkbook();
HSSFWorkbooksheet=wb.createSheet("newsheet");
HSSFRowrow=sheet.createRow((short)1);
/*
*在row的这一行创建四个单元格,short型参数为列号;
*第一个单元格第1列设为整数1,其他单元格使用简洁的一句式写法,分别设置为实数、字符串、布尔型
*/
HSSFCellcell=row.createCell((shot)0);
cell.setCellValue(1);
row.createCell((short)1).setCellValue(1.2);
row.createCell((short)2).setCellValue("HelloWorld");
row.createCell((short)3).setCellValue(true);
/*
*写入文件
*/
FileOutputStreamfileout=newFilwOutStream("c:workbook.xls");
wb.write(fileOut);
fileOut.close();
}
打开Excel文件,其效果如图3所示:

图3实例的效果图
注意;无论行列,在POI中都是以0为起始,即0表示第1行(列),3表示第4行(列)。
中文化的问题:
如果要将sheet命名为中文或将单元格写入中文值,则需要多使用一些语句,否则还像原来那样写,出来的会是乱码。
(1)sheet命名为中文
HSSFWorkbookwb=newHSSFWorkbook();
HSSFSheetsheet=wb.createSheet();
wb.setSheetName(0,"年终报表",HSSFWorkbook.ENCODING_UTF_16);
其中setSheetName的第一个参数值0,是指对工作簿的第一个sheet命名。
(2)单元格写入中文
cell.setEncodig(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("利润");

4.4合并单元格
示例代码如下:
//-----文件名:ExcelSample6.java-----
HSSFWorkbookwb=newHSSFWorkbook();
HSSFSheetsheet=wb.createSheet();
HSSFRowrow=sheet.createRow((short)1);
//将单元格从第2行第2列合并到第3行第5列
HSSFCellcell=row.createCell((short)1);
cell.setCellValue("HellloWorld");
sheet.addMergedRegion(newRegion(newRegion(short)3,2(short)4));
//写入文件
FileOutStreamfileOut=newFileOutputStream("c:workbook.xls");
wb.write(fileOut);
fileOut.close();
效果如图4

图4合并单元格1
说明:以上程序的关键在于Region(1,(short)3,2,(short)4),前两个参数是合并的左上角坐标,后两个参数是右下角坐标,即从第2行第2列合并到第3行第5列,如果将Region的第二个参数改为3,即Region(1,(short)3,2,(short)4),则它是从第2行第4列合并到第3行第5列,其效果如图5所示。

图5合并单元格2
4.5读取Excel文档中的数据
示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为test1.xls的Excel文件。
示例2程序如下:
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFCell;
importjava.io.FileInputStream;
publicclassReadXL{
/**Excel文件的存放位置。注意是正斜线*/
publicstaticStringfileToBeRead="D:test1.xls";
publicstaticvoidmain(Stringargv[]){
try{
//创建对Excel工作簿文件的引用
HSSFWorkbookworkbook=newHSSFWorkbook(newFileInputStream(fileToBeRead));
//创建对工作表的引用。
//本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
HSSFSheetsheet=workbook.getSheet("Sheet1");
//也可用getSheetAt(intindex)按索引引用,
//在Excel文档中,第一张工作表的缺省索引是0,
//其语句为:HSSFSheetsheet=workbook.getSheetAt(0);
//读取左上端单元
HSSFRowrow=sheet.getRow(0);
HSSFCellcell=row.getCell((short)0);
//输出单元内容,cell.getStringCellValue()就是取所在单元的值
System.out.println("左上端单元是:"+cell.getStringCellValue());
}catch(Exceptione){
System.out.println("已运行xlRead():"+e);
}
}
}
4.6设置单元格格式
在这里,我们将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:[!--empirenews.page--]
(1)、创建字体,设置其为红色、粗体:
HSSFFontfont=workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
(2)、创建格式
HSSFCellStylecellStyle=workbook.createCellStyle();
cellStyle.setFont(font);
(3)、应用格式
HSSFCellcell=row.createCell((short)0);
cell.setCellStyle(cellStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("标题");
5总结

本文对POI进行了较详细的剖析,说明了如何使用Java处理MicrosoftExcel文档,提供了一个使用POI的实例。目前,POI在项目开发中运用非常广泛,灵活性、易用性是它最大的特点,此项技术给软件开发人员带来了极大的好处,为解决复杂的统计报表提供了一个方便有效的解决方案。在使用过程中,也发现POI项目的一些不足之处,如中文的显示问题是一个难点,给程序员带来了一些麻烦,我们可以用特定的编码格式来处理中文问题。总之,Java技术发展迅速,POI项目也在不断的完善,它必将在电子政务/电子商务开发运用中发挥更大的作用。


参考文献:
[1]周洪斌《浅谈报表在Java程序中的应用》计算机与信息技术2009-6
[2]郭晓玉鲍慧戚宇林《.JSP中上传文件和生成文件的实现》微计算机信息2006-5
[3]陈刚《eclipse从入门到精通》清华大学出版社
[4]JoseAnnunziato《JSP速成》机械工业出版社

《Java技术中Excel报表的应用研究》

本文由职称驿站首发,您身边的高端学术顾问

文章名称: Java技术中Excel报表的应用研究

文章地址: https://m.zhichengyz.com/p-8671

相关内容推荐
专著出版价格影响因素
只取得了书号,就一定公开出版了么
Journal of the Indian Society of Remote Sensing容易中稿吗
副高专业技术职称sci论文可以吗
Journal of Medical Virology是sci吗
进职称论文可以用综述论文吗
国际出版社出版的专著能够用来评职称吗
老师出专著需要多长时间,多少钱
未能解决您的问题?马上联系学术顾问

未能解决您的问题?

不要急哦,马上联系学术顾问,获取答案!

免费获取
扫码关注公众号

扫码关注公众号

微信扫码加好友

微信扫码加好友

职称驿站 www.zhichengyz.com 版权所有 仿冒必究
冀ICP备16002873号-3