仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1625|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页设计周全发掘Java Excel API 利用办法

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:54:45 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点,excel利用Windows操纵体系的伴侣对Excel(电子表格)必定不会生疏,可是要利用Java言语来利用Excel文件并非一件简单的事。在Web使用日趋流行的明天,经由过程Web来操纵Excel文件的需求愈来愈激烈,今朝较为盛行的操纵是在JSP或Servlet中创立一个CSV(commaseparatedvalues)文件,并将这个文件以MIME,text/csv范例前往给扫瞄器,接着扫瞄器挪用Excel而且显现CSV文件。如许只是说能够会见到Excel文件,可是还不克不及真实的利用Excel文件,本文将给人人一个欣喜,向人人先容一个开放源码项目,JavaExcelAPI,利用它人人就能够便利地利用Excel文件了。JavaExcelAPI简介JavaExcel是一开放源码项目,经由过程它Java开辟职员能够读取Excel文件的内容、创立新的Excel文件、更新已存在的Excel文件。利用该API非Windows操纵体系也能够经由过程纯Java使用来处置Excel数据表。由于是利用Java编写的,以是我们在Web使用中能够经由过程JSP、Servlet来挪用API完成对Excel数据表的会见。如今公布的不乱版本是V2.0,供应以下功效: 从Excel95、97、2000等格局的文件中读取数据;
 读取Excel公式(能够读取Excel97今后的公式);
 天生Excel数据表(格局为Excel97);
 撑持字体、数字、日期的格局化;
 撑持单位格的暗影操纵,和色彩操纵;
 修正已存在的数据表;如今还不撑持以下功效,但不久就会供应了: 不克不及够读取图表信息;
 能够读,可是不克不及天生公式,任何范例公式最初的盘算值都能够读出;
 
使用示例1、从Excel文件读取数据表JavaExcelAPI既能够从当地文件体系的一个文件(.xls),也能够从输出流中读取Excel数据表。读取Excel数据表的第一步是创立Workbook(术语:事情薄),上面的代码片断举例申明了应当怎样操纵:(完全代码见ExcelReading.java)importjava.io.*;
importjxl.*;
…………
try
{
//构建Workbook对象,只读Workbook对象
//间接从当地文件创立Workbook
//从输出流创立Workbook
InputStreamis=newFileInputStream(sourcefile);
jxl.Workbookrwb=Workbook.getWorkbook(is);
}
catch(Exceptione)
{
e.printStackTrace();
}一旦创立了Workbook,我们就能够经由过程它来会见ExcelSheet(术语:事情表)。参考上面的代码片断://猎取第一张Sheet表
Sheetrs=rwb.getSheet(0);我们既大概经由过程Sheet的称号来会见它,也能够经由过程下标来会见它。假如经由过程下标来会见的话,要注重的一点是下标从0入手下手,就像数组一样。一旦失掉了Sheet,我们就能够经由过程它来会见ExcelCell(术语:单位格)。参考上面的代码片断://猎取第一行,第一列的值
Cellc00=rs.getCell(0,0);
Stringstrc00=c00.getContents();//猎取第一行,第二列的值
Cellc10=rs.getCell(1,0);
Stringstrc10=c10.getContents();//猎取第二行,第二列的值
Cellc11=rs.getCell(1,1);
Stringstrc11=c11.getContents();System.out.println("Cell(0,0)"+"value:"+strc00+";type:"+c00.getType());
System.out.println("Cell(1,0)"+"value:"+strc10+";type:"+c10.getType());
System.out.println("Cell(1,1)"+"value:"+strc11+";type:"+c11.getType());假如仅仅是获得Cell的值,我们能够便利地经由过程getContents()办法,它能够将任何范例的Cell值都作为一个字符串前往。示例代码中Cell(0,0)是文本型,Cell(1,0)是数字型,Cell(1,1)是日期型,经由过程getContents(),三品种型的前往值都是字符型。假如有必要晓得Cell内容切实其实切范例,API也供应了一系列的办法。参考上面的代码片断:Stringstrc00=null;
doublestrc10=0.00;
Datestrc11=null;Cellc00=rs.getCell(0,0);
Cellc10=rs.getCell(1,0);
Cellc11=rs.getCell(1,1);if(c00.getType()==CellType.LABEL)
{
LabelCelllabelc00=(LabelCell)c00;
strc00=labelc00.getString();
}
if(c10.getType()==CellType.NUMBER)
{
NmberCellnumc10=(NumberCell)c10;
strc10=numc10.getvalue();
}
if(c11.getType()==CellType.DATE)
{
DateCelldatec11=(DateCell)c11;
strc11=datec11.getDate();
}System.out.println("Cell(0,0)"+"value:"+strc00+";type:"+c00.getType());
System.out.println("Cell(1,0)"+"value:"+strc10+";type:"+c10.getType());
System.out.println("Cell(1,1)"+"value:"+strc11+";type:"+c11.getType());在失掉Cell对象后,经由过程getType()办法能够取得该单位格的范例,然后与API供应的基础范例相婚配,强迫转换成响应的范例,最初挪用响应的取值办法getXXX(),就能够失掉断定范例的值。API供应了以下基础范例,与Excel的数据格局绝对应,以下图所示:每品种型的详细意义,请拜见JavaExcelAPIdocument.当你完成对Excel电子表格数据的处置后,必定要利用close()办法来封闭先前创立的对象,以开释读取数据表的过程当中所占用的内存空间,在读取大批数据时显得尤其主要。参考以下代码片断://操纵完成时,封闭对象,开释占用的内存空间
rwb.close();JavaExcelAPI供应了很多会见Excel数据表的办法,在这里我只扼要地先容几个经常使用的办法,别的的办法请参考附录中的JavaExcelAPIdocument.Workbook类供应的办法1.intgetNumberOfSheets()取得事情薄(Workbook)中事情表(Sheet)的个数,示例:jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
intsheets=rwb.getNumberOfSheets();2.Sheet[]getSheets()前往事情薄(Workbook)中事情表(Sheet)对象数组,示例:jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
Sheet[]sheets=rwb.getSheets();3.StringgetVersion()前往正在利用的API的版本号,仿佛是没甚么太年夜的感化。jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
StringapiVersion=rwb.getVersion();Sheet接口供应的办法1)StringgetName()猎取Sheet的称号,示例:jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
StringsheetName=rs.getName();2)intgetColumns()猎取Sheet表中所包括的总列数,示例:jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
intrsColumns=rs.getColumns();3)Cell[]getColumn(intcolumn)猎取某一列的一切单位格,前往的是单位格对象数组,示例:jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
Cell[]cell=rs.getColumn(0);4)intgetRows()猎取Sheet表中所包括的总行数,示例:jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
intrsRows=rs.getRows();5)Cell[]getRow(introw)猎取某一行的一切单位格,前往的是单位格对象数组,示例子:jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
Cell[]cell=rs.getRow(0);6)CellgetCell(intcolumn,introw)猎取指订单元格的对象援用,必要注重的是它的两个参数,第一个是列数,第二个是行数,这与一般的行、列组合有些分歧。jxl.Workbookrwb=jxl.Workbook.getWorkbook(newFile(sourcefile));
jxl.Sheetrs=rwb.getSheet(0);
Cellcell=rs.getCell(0,0);2、天生新的Excel事情薄上面的代码次要是向人人先容怎样天生复杂的Excel事情表,在这里单位格的内容是不带任何润色的(如:字体,色彩等等),一切的内容都作为字符串写进。(完全代码见ExcelWriting.java)与读取Excel事情表类似,起首要利用Workbook类的工场办法创立一个可写进的事情薄(Workbook)对象,这里要注重的是,只能经由过程API供应的工场办法来创立Workbook,而不克不及利用WritableWorkbook的机关函数,由于类WritableWorkbook的机关函数为protected范例。示例代码片断以下:importjava.io.*;
importjxl.*;
importjxl.write.*;
…………
try
{
//构建Workbook对象,只读Workbook对象
//Method1:创立可写进的Excel事情薄
jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile(targetfile));//Method2:将WritableWorkbook间接写进到输入流
/*
OutputStreamos=newFileOutputStream(targetfile);
jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(os);
*/
}
catch(Exceptione)
{
e.printStackTrace();
}API供应了两种体例来处置可写进的输入流,一种是间接天生当地文件,假如文件名不带全路径的话,缺省的文件会定位在以后目次,假如文件名带有全路径的话,则天生的Excel文件则会定位在响应的目次;别的一种是将Excel对象间接写进到输入流,比方:用户经由过程扫瞄器来会见Web服务器,假如HTTP头设置准确的话,扫瞄器主动挪用客户真个Excel使用程序,来显现静态天生的Excel电子表格。接上去就是要创立事情表,创立事情表的办法与创立事情薄的办法几近一样,一样是经由过程工场形式办法取得响应的对象,该办法必要两个参数,一个是事情表的称号,另外一个是事情表在事情薄中的地位,参考上面的代码片断://创立Excel事情表
jxl.write.WritableSheetws=wwb.createSheet("TestSheet1",0);"这锅也支好了,质料也筹办完全了,能够入手下手下锅了!",如今要做的只是实例化API所供应的Excel基础数据范例,并将它们增加到事情表中就能够了,参考上面的代码片断:
//1.增加Label对象
jxl.write.LabellabelC=newjxl.write.Label(0,0,"ThisisaLabelcell");
ws.addCell(labelC);//增加带有字型Formatting的对象
jxl.write.WritableFontwf=newjxl.write.WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);
jxl.write.WritableCellFormatwcfF=newjxl.write.WritableCellFormat(wf);
jxl.write.LabellabelCF=newjxl.write.Label(1,0,"ThisisaLabelCell",wcfF);
ws.addCell(labelCF);//增加带有字体色彩Formatting的对象
jxl.write.WritableFontwfc=newjxl.write.WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,
Underlinestyle.NO_UNDERLINE,jxl.format.Colour.RED);
jxl.write.WritableCellFormatwcfFC=newjxl.write.WritableCellFormat(wfc);
jxl.write.LabellabelCFC=newjxl.write.Label(1,0,"ThisisaLabelCell",wcfFC);
ws.addCell(labelCF);//2.增加Number对象
jxl.write.NumberlabelN=newjxl.write.Number(0,1,3.1415926);
ws.addCell(labelN);//增加带有formatting的Number对象
jxl.write.NumberFormatnf=newjxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormatwcfN=newjxl.write.WritableCellFormat(nf);
jxl.write.NumberlabelNF=newjxl.write.Number(1,1,3.1415926,wcfN);
ws.addCell(labelNF);//3.增加Boolean对象
jxl.write.BooleanlabelB=newjxl.write.Boolean(0,2,false);
ws.addCell(labelB);//4.增加DateTime对象
jxl.write.DateTimelabelDT=newjxl.write.DateTime(0,3,newjava.util.Date());
ws.addCell(labelDT);//增加带有formatting的DateFormat对象
jxl.write.DateFormatdf=newjxl.write.DateFormat("ddMMyyyyhh:mm:ss");
jxl.write.WritableCellFormatwcfDF=newjxl.write.WritableCellFormat(df);
jxl.write.DateTimelabelDTF=newjxl.write.DateTime(1,3,newjava.util.Date(),wcfDF);
ws.addCell(labelDTF);这里有两点人人要引发人人的注重。第一点,在机关单位格时,单位格在事情表中的地位就已断定了。一旦创立后,单位格的地位是不克不及够变动的,只管单位格的内容是能够改动的。第二点,单位格的定位是依照上面如许的纪律(column,row),并且下标都是从0入手下手,比方,A1被存储在(0,0),B1被存储在(1,0)。最初,不要健忘封闭翻开的Excel事情薄对象,以开释占用的内存,拜见上面的代码片断://写进Exel事情表
wwb.write();//封闭Excel事情薄对象
wwb.close();这大概与读取Excel文件的操纵有极少分歧,在封闭Excel对象之前,你必需要先挪用write()办法,由于先前的操纵都是存储在缓存中的,以是要经由过程该办法将操纵的内容保留在文件中。假如你先封闭了Excel对象,那末只能失掉一张空的事情薄了。3、拷贝、更新Excel事情薄接上去扼要先容一下怎样更新一个已存在的事情薄,次要是上面二步操纵,第一步是机关只读的Excel事情薄,第二步是使用已创立的Excel事情薄创立新的可写进的Excel事情薄,参考上面的代码片断:(完全代码见ExcelModifying.java)//创立只读的Excel事情薄的对象
jxl.Workbookrw=jxl.Workbook.getWorkbook(newFile(sourcefile));//创立可写进的Excel事情薄对象
jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile(targetfile),rw);//读取第一张事情表
jxl.write.WritableSheetws=wwb.getSheet(0);//取得第一个单位格对象
jxl.write.WritableCellwc=ws.getWritableCell(0,0);//判别单位格的范例,做出响应的转化
if(wc.getType()==CellType.LABEL)
{
Labell=(Label)wc;
l.setString("Thevaluehasbeenmodified.");
}//写进Excel对象
wwb.write();//封闭可写进的Excel对象
wwb.close();//封闭只读的Excel对象
rw.close();之以是利用这类体例构建Excel对象,完整是由于效力的缘故原由,由于下面的示例才是API的次要使用。为了进步功能,在读取事情表时,与数据相干的一些输入信息,一切的格局信息,如:字体、色彩等等,是不被处置的,由于我们的目标是取得行数据的值,既使没有了润色,也不会对行数据的值发生甚么影响。独一的倒霉的地方就是,在内存中会同时保留两个一样的事情表,如许当事情表体积对照年夜时,会占用相称年夜的内存,但如今仿佛内存的巨细并非甚么关头要素了。一旦取得了可写进的事情表对象,我们就能够对单位格对象举行更新的操纵了,在这里我们不用挪用API供应的add()办法,由于单位格已于事情表傍边,以是我们只必要挪用响应的setXXX()办法,就能够完成更新的操纵了。尽单位格原本的格局化润色是不克不及往失落的,我们仍是能够将新的单位格润色加上往,以使单位格的内容以分歧的情势体现。重生成的事情表对象是可写进的,我们除更新原本的单位分外,还能够增加新的单位格到事情表中,这与示例2的操纵是完整一样的。最初,不要健忘挪用write()办法,将更新的内容写进到文件中,然后封闭事情薄对象,这里有两个事情薄对象要封闭,一个是只读的,别的一个是可写进的。
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的),
不帅 该用户已被删除
19#
发表于 2015-7-4 07:49:41 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
愤怒的大鸟 该用户已被删除
18#
发表于 2015-7-1 20:44:31 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
海妖 该用户已被删除
17#
发表于 2015-6-13 11:19:56 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
冷月葬花魂 该用户已被删除
16#
发表于 2015-6-12 08:41:02 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
再见西城 该用户已被删除
15#
发表于 2015-5-5 05:55:41 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
第二个灵魂 该用户已被删除
14#
发表于 2015-5-1 22:10:45 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
深爱那片海 该用户已被删除
13#
发表于 2015-5-1 17:10:41 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
蒙在股里 该用户已被删除
12#
发表于 2015-3-31 12:50:37 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
若天明 该用户已被删除
11#
发表于 2015-3-27 09:07:23 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
山那边是海 该用户已被删除
10#
发表于 2015-3-20 16:40:50 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
分手快乐 该用户已被删除
9#
发表于 2015-3-18 01:57:05 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
小妖女 该用户已被删除
8#
发表于 2015-3-11 09:04:24 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
小女巫 该用户已被删除
7#
发表于 2015-3-3 03:29:00 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
admin 该用户已被删除
6#
发表于 2015-2-25 23:02:55 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
莫相离 该用户已被删除
5#
发表于 2015-2-8 19:40:41 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
活着的死人 该用户已被删除
地板
发表于 2015-2-4 21:15:56 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
变相怪杰 该用户已被删除
板凳
发表于 2015-2-4 20:07:02 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-30 21:23:37 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
金色的骷髅 该用户已被删除
楼主
发表于 2015-1-21 16:58:19 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表