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

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

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

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

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

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

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

  摘要:许多机构都使用微软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

相关内容推荐
New Journal of Chemistry影响因子
Antioxidants影响因子是多少
Environmental Science & Technology(ES&T)影响因子
评正高专业著作1部是单书号还是双书号
Journal of Hazardous Materials影响因子是多少
sci论文在知网可以查吗
用EI目录告诉你EI期刊怎么找
Scientific Reports影响因子是多少
未能解决您的问题?马上联系学术顾问

未能解决您的问题?

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

免费获取
扫码关注公众号

扫码关注公众号

微信扫码加好友

微信扫码加好友

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