pipimob 2012-09-11
jxl操作excel
一、API系列
Jxl的API主要有三个包,jxl,jxl.format,jxl.write.如果单独的分析API,可能对于更明确的了解此API没有太多的帮助,我们还是从Excel文件的层次来剥离此API吧.
一个excel文件由一个工作簿组成,一个工作簿又由n个工作表组成.每个工作表又由多个单元格组成.对应于Jxl中的结构为
读文件(包jxl)
写文件(包jxl.write)
说明
Workbook
WritableWorkbook
工作簿
Sheet
WritableSheet
工作表
Cell/Image/Hyperlink
WritableCell/WritableImage//WritableHyperlink
单元格/图像/超链接
单元格(此处指文本单元格,图像及链接和单元格做为一个层次)分为好多种,所以在API的设计中将Cell作为一个接口而存在.
对应的jxl中的结构为:
读文件(包jxl)
写文件(包jxl.write)
说明
Cell
WritableCell
单元格
BooleanCell
Boolean
布尔值单元格
DateCell
DateTime
时间单元格
ErrorCell
形式错误的单元格
LabelCell
Label
文本单元格
NumberCell
Number
数字单元格
FormualCedll
Formual
公式单元格
Blank
空格单元格
BooleanFormualCell
布尔公式单元格
DateFormualCell
时间公式单元格
ErrorFormualCell
错误公式单元格
StringFormualCell
文本公式单元格
NumberFormualCell
数字公式单元格
而有的时候,我们可能将几个单元格作为一个整体来处理,在API中对应的则是:
jxl.Range
虽然数据是电子表格的核心,但是同时其也需要一些辅助类 比如文件格式设置,工作表设置与显示效果.单元格设置与显示效果等.按照其层次,则依次有以下接口或类.
读文件(包jxl)
写文件(包jxl.write)
说明
WorkbookSettings
WorkbookSettings(包jxl)
设置workbook属性的bean
SheetSettings
SheetSettings(包jxl)
设置具体sheet的属性的bean(比如表头表底等)
HeaderFooter
HeaderFooter(包jxl)
表示表头表底类
HeaderFooter.Contents
HeaderFooter.Contents(包jxl)
具体表头表底设置
CellFeatures
WritableCellFeautres
表格内容相关设置(验证)
CellReferenceHelper
得到引用单元格相关属性
CellType
表格相关类型
CellView
CellView(包jxl)
表格视图相关设置
CellFormat
WritableCellFormat
表格显示样式设置
BoldStyle
边框枚举
DateFormat
时间格式
DateFormats
时间格式枚举
NumbreFormat
数据格式
NumbreFormats
数字模式枚举
WritableFont
字体设置
WriteableFont.Fontname
静态字体内部类
最后,关于Jxl.format包.此包主要是一些与具体样式有关的接口和枚举.不进行具体描述.第一部分完.
(二)应用
在进行实践前,我们需要对excel有一个大致的了解,excel文件由一个工作簿(Workbook)组成,工作簿由工作表(sheet)组成,每个工作表又由很多单元格(cell)组成.工作簿有自己的特征,同样工作表,单元格也一样.从大局上了解了excel文件,对于我们更好的使用jxl是有一定的帮助的.具体请查看(一)API
在jxl中其大概的层次是这样的
名称
属性
Workbook
WorkbookSettings
Sheet
SheetSettings
Cell
CeLlFormatCellFeaturesCellViewCellType
Jxl读excel:
得到工作簿的方法主要有四个:
getWorkbook(Filefile)
getWorkbook(Filefile,WorkSettingsws)
getWorkbook(InputStreamis)
getWorkbook(InputStreamis,WorkSettingsws)
参数有两个:
第一个参数是必须的:文件或输入流,
第二个参数:工作簿ws是作为读出来的excel的一些约定,如地区,编码等.
如果文件错误或格式错误,将会抛出BiffException或IOException.
代码段:
Workbookwb=null;
try
{
wb=Workbook.getWorkbook(excelFile);
wb.close();
}
catch(BiffExceptionex){
//转换错误
}catch(IOExceptionex){
//IO错误
}
以上如果一切正常的话,将得到此excel文件的工作簿.接下来我们就可以通过此文件簿得到其他的东西了.以下是得到工作表有关的方法
intgetNumberOfSheets()//工作表个数
SheetgetSheet(Stringname);//得到此对应名称的工作表
SheetgetSheet(intindex);//得到此序列号的工作表
Sheet[]getSheets();//得到工作表数组
String[]getSheetNames();//得到工作表名称数组
示例代码如下:
Sheetsheet;
if(wb.getNumberOfSheets()>0)
{
sheet=wb.getSheet(0);
}
以下的方法除非特别目的,否则用到的地方不多.
Range[]finaName(Stringname);//得到此名称的表格区
CellfindCellByName(Stringname);//得到此名称的Cell
CellgetCell(Stringloc)
String[]getRangeNames();
与文件是否可写有关的
booleanisProected();
得到了工作簿文件的某个工作表时.
对于工作表而言其主要的内容就是单元格了.
//根据内容查看
CellfindCell(Patternpattern,intfirstCol,intfirstRow,intlastCol,intlastRow,Booleanreverse)
CellfindCell(Stringcontent)
CellfindCell(Stringcontent,omtforstCol,intfirstRow,intlastCol,intlastRow,Booleanreverse)
LabelCellfindLabelCell(Stringcontents)
//根据位置得到
CellgetCell(intcol,introw)
CellgetCell(Stringloc)//loc的格式为A3/B1/C3其相同于
getCell(CellReferenceHelper.getColumn(loc0,CellReferenceHelper.getRow(loc)),所以相对而言其性能没有CellgetCell(intcol,introw)快
//单元格数组
Cell[]getRows(introw)//当前行单元格数组
Cell[]getCols(intcol)//当前列单元格数组
//特殊单元格数组
//超链接表格
Hyperlink[]getHyperlinks();//超链接数组
//区域表格
Range[]getMergedCells();//区域单元格数组
//图像表格
IntgetNumberOfImages()//拥有图片数
ImagegetDrawing(intindex)//对应序号的图片
//工作表或多个表格一些自我属性
StringgetName()//工作表名
intgetRows()//行数
intgetCols()//列数
SheetSettingsgetSettings()//工作表设置
CellViewgetColumnView(intcol)//此列的表格视图
CellViewgetRowView(introw)//此行的表格视图
以下是与单元格有关的一些操作:
CellFeaturesgetCellFeatures()//主要是与表格内容有关的一些性质如验证等
CellFormatgetCellFormat()//主要是表格外在表现格式有关的一些性质.
intgetColumn()//所在列
intgetRow()//所在行
StringgetContents();//内容
booleanisHidden();//可见否
CellTypegetType();//表格类型 如果不确定表格如果转换则可以使用此方法来确定表格类型.
以下我们讲述如何写excel文件.
写文件分为两种情况 一种是新建一种则是更新.
新建excel文件
新建excel文件很简单:
//文件
WritableWorkbookcreateWorkbook(Filefile)//无形式的创建一个excel文件
WritableWorkbookcreateWorkbook(FilefileWorkbookin)
//以in一样的格式创建一个excel文件,其初始内容与in文件相同(更新文件可以用到此方法)
WriteableWorkbookcreateWorkbook(Filefile,WorkSettingws)//以ws的设定创建文件
WritableWorkbookcreateWorkbook(Filefile,Workbookin,WorkSettingws)
//以ws的设定创建一个与in文件相同的文件
//流
WritableWorkbookcreateWorkbook(OutputStreamos)
WritableWorkbookcreateWorkbook(OutputStreamosWorkbookin)
WriteableWorkbookcreateWorkbook(OutputStreamos,WorkSettingws)
WritableWorkbookcreateWorkbook(OutputStreamos,Workbookin,WorkSettingws)
代码示例:
WritableWorkbookwrb;
WriteableWorkbookwrbin;
try
{
wrb=Workbook.createWorkbook(targetfile);
wrbin=Workbook.createWorkbook(targetfile,wb);
}
catch(IOexceptione)
{
//IO错误
}
当创建好工作簿时,我们就需要新建工作表了
WritableSheetcreateSheet(Stringname,intindex);
WritableSheetwrs=wrb.createSheet(“demo”,0);
//创建一个名为demo的工作表,其为工作簿的第一个工作表.
接下来我们就可以进行其他操作了
添加文本类单元格:
Label label=newLabel(0,0,””);
wrb.addCell(label);
//添加数据单元格
Numbernumber=newNumber(0,3,1234);
wrb.addCell(number);
//添加时间单元格
DateTimedt=newDateTime(0,4,newDate());
Wrb.addCell(dt);
//添加公式单元格
Fornualformual=newFormual(0,11,”Sum(A1:A9)”);
wrb.addCell(formual);
添加超链接类单元格
WirtableHyperlinkwrlink=
newWritableHyperlink(0,1,0,1,newURL(“www.emlog.net/fei”),”emlog”);
wrb.addHyperlink(wrlink);
//添加图像
WritableImagewrimage=newWritableImage(1,5,10,10,newFile(imageFilepath));
wrb.addImage(wrimage);
//注意,API中注明只支持png文件,然而我用其他格式的图片,通过将其后缘改为png也能放到excel文件中.果然,在查看其具体源代码时,发现作者只是检测了文件的后缀名,如果不对 给出警告,并没有从图像文件的具体格式进行检测.
当然,表格中的数据算是表格的核心部分,但是同时API也提供了大量的其他方法来丰富表格的显示.在此,大家具体在使用过程中进行运用就行.
//最后,写完表格后,不要忘记进行写操作,也就是常说的保存
wrb.write()
wrb.close();保存完后关闭相应资源是一个合格的程序员应该做的.
接下来,我们就来讲述写文件的另一方面:更新文件.有时候,并不仅仅只是需要新写文件,可能需要对已有文件进行更新.这时候我们可以这么来实现.
Workbookwb=Workbook.getWorkbook(modifyFile);
WritableWorkbookwrb=Workbook.createWorkbook(modifyFile,wb);
以上就实现了得到一个已存在的文件的可修改副本.
//得到第一个工作表
WritableSheetwrs=wrb.getSheet(0);
//得到A0单元格
Cellcell=Wrs.getCell(0,0);
//对单元格格式进行判断
If(cell.getType()==CellType.LABEL){
Labellabel=(Label)cell;
label.setString(“urmodified.”);
}//modifyend
//saveexcel
wrb.write();
wb.close();
wrb.close();
以上就简单的完成了一次excel文件的修改.API中还提供了复制工作表,复制单元格等操作,大家可以通过查询API来了解其具体的用法.我们可以从作者提供的包中得到很多关于如何使用API的示例.