POI整理.docx
- 文档编号:7590138
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:108
- 大小:1.20MB
POI整理.docx
《POI整理.docx》由会员分享,可在线阅读,更多相关《POI整理.docx(108页珍藏版)》请在冰豆网上搜索。
POI整理
1.HSSFWorkbook类(创建excel表)
首先从Workbook开始我们的POI编程之旅。
要生成一个Workbook,需要用到HSSFWorkbook类文件,类定义如下:
∙java.lang.Object
∙org.apache.poi.hssf.usermodel.HSSFWorkbook
∙publicclassHSSFWorkbookextendsjava.lang.Object
它有五个构造方法:
构建器
HSSFWorkbook()
CreatesnewHSSFWorkbookfromscratch(starthere!
)
HSSFWorkbook(java.io.InputStreams)
HSSFWorkbook(java.io.InputStreams,booleanpreserveNodes)
CompaniontoHSSFWorkbook(POIFSFileSystem),thisconstructsthePOIfilesystemaroundyourinputstream.
HSSFWorkbook(POIFSFileSystemfs)
HSSFWorkbook(POIFSFileSystemfs,booleanpreserveNodes)
givenaPOIPOIFSFileSystemobject,readinitsWorkbookandpopulatethehighandlowlevelmodels.
我们用第一个构建器来生成一个Workbook
HSSFWorkbook
publicHSSFWorkbook()
CreatesnewHSSFWorkbookfromscratch(starthere!
)
使用方法如下:
HSSFWorkbookworkbook=newHSSFWorkbook();
接下来再来对生成的Workbook进行保存操作,保存操作用「HSSFWorkbook」类的「write」方法:
write
publicvoidwrite(java.io.OutputStreamstream)throws
java.io.IOException
Methodwrite-writeoutthisworkbooktoanOutputstream.
ConstructsanewPOIPOIFSFileSystem,passesintheworkbook
binaryrepresentationandwritesitout.
Parameters:
stream--thejavaOutputStreamyouwishtowritetheXLSto
Throws:
java.io.IOException-ifanythingcan'tbewritten.
参数是作为保存对象的输出流对象「OutputStream」。
示例程序
可以自己实际做一下啊。
importjava.io.*;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
publicclassPOISample{
publicstaticvoidmain(String[]args){
HSSFWorkbookworkbook=newHSSFWorkbook();//创建一个空白的workbook
FileOutputStreamout=null;
try{
out=newFileOutputStream("sample.xls");
workbook.write(out);//调用HSSFWorkbook类的write方法写入到输出流
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
out.close();
}catch(IOExceptione){
System.out.println(e.toString());
}
}
}
}
运行刚才的示例程序来生成一个Excel文件吧。
==========================================异常华丽的分割线=============================================================
2.POIFSFileSystem类(读取excel表格)
这次我们用POI打开一个已经存在的Workbook。
因为没有现成的方法,所以只能再次利用HSSFWorkbook构造方法
HSSFWorkbook
publicHSSFWorkbook(POIFSFileSystemfs)throwsjava.io.IOException
--
这个构建器虽然没什么说明,但可以看出它的参数是一个「POIFSFileSystem」这样的一个类对象。
那我们再来看看「POIFSFileSystem」类定义。
POIFSFileSystem类定义
「POIFSFileSystem」类对象可以把Excel文件作为数据流来进行传入传出。
∙java.lang.Object
∙org.apache.poi.poifs.filesystem.POIFSFileSystem
∙publicclassPOIFSFileSystemextendsjava.lang.ObjectimplementsPOIFSViewable
「POIFSFileSystem」类有两个构建器
构建器
POIFSFileSystem()
Constructor,intendedforwriting
POIFSFileSystem(java.io.InputStreamstream)
CreateaPOIFSFileSystemfromanInputStream
读取文件时使用第二个构建器。
POIFSFileSystem
publicPOIFSFileSystem(java.io.InputStreamstream)throws
java.io.IOException
CreateaPOIFSFileSystemfromanInputStream
Parameters:
stream-theInputStreamfromwhichtoreadthedata
Throws:
java.io.IOException-onerrorsreading,oroninvaliddata
参数设定为读入Excel文件的流对象「InputStream」。
使用方法如下。
FileInputStreamin=newFileInputStream("sample.xls");//文件输入流
POIFSFileSystemfs=newPOIFSFileSystem(in);//构建poifsfileSystem对象,根据输入流
HSSFWorkbookwb=newHSSFWorkbook(fs);
通过POIFSFileSystem读取Excel文件
下面就实际做一下如何读取Excel文件。
importjava.io.*;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.poifs.filesystem.POIFSFileSystem;
publicclassPOISample{
publicstaticvoidmain(String[]args){
FileInputStreamin=null;
HSSFWorkbookworkbook=null;
try{
in=newFileInputStream("sample1.xls");//将excel文件转为输入流
POIFSFileSystemfs=newPOIFSFileSystem(in);//构建POIFSFileSystem类对象,用输入流构建
workbook=newHSSFWorkbook(fs);//创建个workbook,根据POIFSFileSystem对象
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
in.close();
}catch(IOExceptione){
System.out.println(e.toString());
}
}
FileOutputStreamout=null;
try{
out=newFileOutputStream("sample2.xls");
workbook.write(out);
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
out.close();
}catch(IOExceptione){
System.out.println(e.toString());
}
}
}
}
这个示例程序的作用是读取「sample1.xls」文件后再把它作为「sample2.xls」保存。
「sample1.xls」文件如下。
实行之后,会生成一模一样的文件「sample2.xls」。
打开如下。
==========================================异常华丽的分割线=============================================================
3.关于Sheet
HSSFSheet类定义
用POI来作成一个Sheet,可以用「HSSFSheet」类,它的类定义如下。
∙java.lang.Object
∙org.apache.poi.hssf.usermodel.HSSFSheet
∙publicclassHSSFSheetextendsjava.lang.Object
它有两个构造方法。
构建器
protectedHSSFSheet(Workbookbook)
CreatesnewHSSFSheet–calledbyHSSFWorkbooktocreateasheetfromscratch.
protectedHSSFSheet(Workbookbook,Sheetsheet)
CreatesanHSSFSheetrepresentingthegivenSheetobject.
虽然有两个构建器,但都是protected的,所以要新建Sheet,只能通过Workbook。
新建Sheet
在Workbook里新建Sheet时,还是使用「HSSFWorkbook」类的「createSheet」的方法,详细可以参照「在Workbook里创建Sheet」。
使用方法如下。
HSSFWorkbookworkbook=newHSSFWorkbook();//创建个空白的workbook
HSSFSheetsheet=workbook.createSheet();//创建个空白的sheet
读取现有的Sheet
对于在Workbook已经存在的Sheet来说,可以用「HSSFWorkbook」类的「getSheet」方法来读取。
getSheet
publicHSSFSheetgetSheet(java.lang.Stringname)
Getsheetwiththegivenname
Parameters:
name-ofthesheet
Returns:
HSSFSheetwiththenameprovidedornullifitdoesnotexist
(java.lang.Stringname)参数为Sheet名称。
使用方法如下。
HSSFWorkbookworkbook=newHSSFWorkbook();
HSSFSheetsheet=workbook.getSheet("sheet1")//读取名称为sheet1的sheet
不用Sheet名而用Sheet的序列号来取得Sheet的话,可以用「HSSFWorkbook」类的「getSheetAt」方法。
getSheetAt
publicHSSFSheetgetSheetAt(intindex)
GettheHSSFSheetobjectatthegivenindex.
Parameters:
index-ofthesheetnumber(0-basedphysical&logical)
Returns:
HSSFSheetattheprovidedindex
(intindex)参数为sheet的序号
使用方法如下。
HSSFWorkbookworkbook=newHSSFWorkbook();
HSSFSheetsheet=workbook.getSheetAt
(1);//读取序号为1的sheet(第二张sheet)
=================
Workbook创建Sheet
要在Workbook里创建一个Sheet,可以使用「HSSFWorkbook」类的「createSheet」方法。
createSheet
publicHSSFSheetcreateSheet()
createanHSSFSheetforthisHSSFWorkbook,addsittothesheetsand
returnsthehighlevelrepresentation.Usethistocreatenewsheets.
Returns:
HSSFSheetrepresentingthenewsheet.
还有一个名称相同的「createSheet」方法,但可以指定Sheet名。
createSheet
publicHSSFSheetcreateSheet(java.lang.Stringsheetname)
createanHSSFSheetforthisHSSFWorkbook,addsittothesheetsand
returnsthehighlevelrepresentation.Usethistocreatenewsheets.
Parameters:
sheetname-sheetnametosetforthesheet.
Returns:
HSSFSheetrepresentingthenewsheet.
创建的Sheet作为「HSSFSheet」类对象返回。
示例程序
importjava.io.*;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
publicclassPOISample{
publicstaticvoidmain(String[]args){
HSSFWorkbookworkbook=newHSSFWorkbook();
workbook.createSheet();//创建workbook的sheet
workbook.createSheet();
workbook.createSheet("test");
FileOutputStreamout=null;
try{
out=newFileOutputStream("sample.xls");
workbook.write(out);
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
out.close();
}catch(IOExceptione){
System.out.println(e.toString());
}
}
}
}
上面的示例程序执行后,会生成下面的「sample1.xls」文件。
如果没有设定Sheet名,会从0开始默认设定为Sheet0,Sheet1等,设定为test的话,则可以创建test这样的Sheet。
===================================
Workbook复制Sheet
要复制Workbook里现有的Sheet来创建新的Sheet,可以使用「HSSFWorkbook」类的「cloneSheet」方法。
cloneSheet
publicHSSFSheetcloneSheet(intsheetNum)
createanHSSFSheetfromanexistingsheetintheHSSFWorkbook.
Returns:
HSSFSheetrepresentingtheclonedsheet.
指定要复制的Sheet序列号。
示例程序
再一次动手来做做吧。
复制前Workbook如下。
importjava.io.*;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.poifs.filesystem.POIFSFileSystem;
publicclassPOISample{
publicstaticvoidmain(String[]args){
FileInputStreamin=null;
HSSFWorkbookworkbook=null;
try{
in=newFileInputStream("sample.xls");
POIFSFileSystemfs=newPOIFSFileSystem(in);
workbook=newHSSFWorkbook(fs);
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
in.close();
}catch(IOExceptione){
System.out.println(e.toString());
}
}
workbook.cloneSheet(0);
workbook.cloneSheet
(1);
FileOutputStreamout=null;
try{
out=newFileOutputStream("sample.xls");
workbook.write(out);
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
out.close();
}catch(IOExceptione){
System.out.println(e.toString());
}
}
}
}
执行后打开「sample1.xls」文件看看。
可以看出,两个Sheet被成功复制。
被复制的Sheet名格式是「原Sheet名(序列号)」。
顺便一提的是,如果你手动在Excel里进行复制的话,被复制的Sheet名的格式是「原Sheet名(序列号)」。
也就是原Sheet名和(序列号)之间有一个半角空格。
=============
Workbook删除Sheet
要从Workbook里删除Sheet,可以使用「HSSFWorkbook」类的方法「removeSheetAt」。
removeSheetAt
publicvoidremoveSheetAt(intindex)
removessheetatthegivenindex
Parameters:
index-ofthesheet(0-based)
(intindex)指定要删除Sheet的序列号。
如果不知道序列号的话,也可以通过「HSSFWorkbook」类的方法「getSheetIndex」,设定Sheet名来取得序列号。
getSheetIndex
publicintgetSheetIndex(java.lang.Stringname)
Returnstheindexofthesheetbyhisname
Parameters:
name-thesheetname
Returns:
indexofthesheet(0based)
(java.lang.Stringname)参数请指定要删除的Sheet名。
示例程序
生成一个Workbook,再在其中创建三个Sheet,最后再把名为「Sheet1」的Sheet删除。
importjava.io.*;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
publicclassPOISample{
publicstaticvoidmain(String[]args){
HSSFWorkbookworkbook=newHSSFWorkbook();
workbook.createSheet();
workbook.createSheet();
workbook.createSheet();
workbook.removeSheetAt(workbook.getSheetIndex("Sheet1"));
System.out.println("Sheet0="+workbook.getSheetIndex("Sheet0"));
System.out.println("Sheet2="+workbook.getSheetIndex("Sheet2"));
FileOutputStreamout=null;
try{
out=newFileOutputStream("sample.xls");
workbook.write(out);
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
out.close();
}catc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- POI 整理