一、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 |
CeLlFormat CellFeatures CellView CellType |
Jxl讀excel:
得到工作簿的方法主要有四個:
getWorkbook(File file)
getWorkbook(File file,WorkSettings ws)
getWorkbook(InputStream is)
getWorkbook(InputStream is,WorkSettings ws)
參數有兩個:
第一個參數是必須的:文件或輸入流,
第二個參數:工作簿ws是作爲讀出來的excel的一些約定,如地區,編碼等.
如果文件錯誤或格式錯誤,將會拋出BiffException或IOException.
代碼段:
Workbook wb=null;
try
{
wb = Workbook.getWorkbook(excelFile);
wb.close();
}
catch(BiffException ex){
//轉換錯誤
}catch(IOException ex){
//IO錯誤
}
以上如果一切正常的話,將得到此excel文件的工作簿.接下來我們就可以通過此文件簿得到其他的東西了.以下是得到工作表有關的方法
int getNumberOfSheets()//工作表個數
Sheet getSheet(String name);//得到此對應名稱的工作表
Sheet getSheet(int index);//得到此序列號的工作表
Sheet[] getSheets();//得到工作表數組
String[] getSheetNames();//得到工作表名稱數組
示例代碼如下:
Sheet sheet;
if(wb.getNumberOfSheets()>0)
{
sheet = wb.getSheet(0);
}
以下的方法除非特別目的,否則用到的地方不多.
Range[] finaName(String name);//得到此名稱的表格區
Cell findCellByName(String name);//得到此名稱的Cell
Cell getCell(String loc)
String[] getRangeNames();
與文件是否可寫有關的
boolean isProected();
得到了工作簿文件的某個工作表時.
對於工作表而言其主要的內容就是單元格了.
//根據內容查看
Cell findCell(Pattern pattern,int firstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)
Cell findCell(String content)
Cell findCell(String content,omt forstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)
LabelCell findLabelCell(String contents)
//根據位置得到
Cell getCell(int col,int row)
Cell getCell(String loc)//loc的格式爲A3/B1/C3其相同於
getCell(CellReferenceHelper.getColumn(loc0,CellReferenceHelper.getRow(loc)),所以相對而言其性能沒有Cell getCell(int col,int row)快
//單元格數組
Cell[] getRows(int row)//當前行單元格數組
Cell[] getCols(int col)//當前列單元格數組
//特殊單元格數組
//超鏈接表格
Hyperlink[] getHyperlinks();//超鏈接數組
//區域表格
Range[] getMergedCells();//區域單元格數組
//圖像表格
Int getNumberOfImages()//擁有圖片數
Image getDrawing(int index)//對應序號的圖片
//工作表或多個表格一些自我屬性
String getName()//工作表名
int getRows()//行數
int getCols()//列數
SheetSettings getSettings()//工作表設置
CellView getColumnView(int col)//此列的表格視圖
CellView getRowView(int row)//此行的表格視圖
以下是與單元格有關的一些操作:
CellFeatures getCellFeatures()//主要是與表格內容有關的一些性質如驗證等
CellFormat getCellFormat()//主要是表格外在表現格式有關的一些性質.
int getColumn()//所在列
int getRow()//所在行
String getContents();//內容
boolean isHidden();//可見否
CellType getType();//表格類型 如果不確定表格如果轉換則可以使用此方法來確定表格類型.
以下我們講述如何寫excel文件.
寫文件分爲兩種情況 一種是新建一種則是更新.
新建excel文件
新建excel文件很簡單:
//文件
WritableWorkbook createWorkbook(File file) //無形式的創建一個excel文件
WritableWorkbook createWorkbook(File file Workbook in)
//以in一樣的格式創建一個excel文件,其初始內容與in文件相同(更新文件可以用到此方法)
WriteableWorkbook createWorkbook(File file,WorkSetting ws)//以ws的設定創建文件
WritableWorkbook createWorkbook(File file,Workbook in,WorkSetting ws)
//以ws的設定創建一個與in文件相同的文件
//流
WritableWorkbook createWorkbook(OutputStream os)
WritableWorkbook createWorkbook(OutputStream os Workbook in)
WriteableWorkbook createWorkbook(OutputStream os,WorkSetting ws)
WritableWorkbook createWorkbook(OutputStream os,Workbook in,WorkSetting ws)
代碼示例:
WritableWorkbook wrb;
WriteableWorkbook wrbin;
try
{
wrb = Workbook.createWorkbook(targetfile);
wrbin = Workbook.createWorkbook(targetfile,wb);
}
catch (IOexception e)
{
//IO錯誤
}
當創建好工作簿時,我們就需要新建工作表了
WritableSheet createSheet(String name,int index);
WritableSheet wrs = wrb.createSheet(“demo”,0);
//創建一個名爲demo的工作表,其爲工作簿的第一個工作表.
接下來我們就可以進行其他操作了
添加文本類單元格:
Label label = new Label(0,0,””);
wrb.addCell(label);
//添加數據單元格
Number number = new Number(0,3,1234);
wrb.addCell(number);
//添加時間單元格
DateTime dt = new DateTime(0,4,new Date());
Wrb.addCell(dt);
//添加公式單元格
Fornual formual = new Formual(0,11,”Sum(A1:A9)”);
wrb.addCell(formual);
添加超鏈接類單元格
WirtableHyperlink wrlink =
new WritableHyperlink(0,1,0,1,new URL(“www.emlog.net/fei”),”emlog”);
wrb.addHyperlink(wrlink);
//添加圖像
WritableImage wrimage=new WritableImage(1,5,10,10,new File(imageFilepath));
wrb.addImage(wrimage);
//注意,API中註明只支持png文件,然而我用其他格式的圖片,通過將其後緣改爲png也能放到excel文件中.果然,在查看其具體源代碼時,發現作者只是檢測了文件的後綴名,如果不對 給出警告,並沒有從圖像文件的具體格式進行檢測.
當然,表格中的數據算是表格的核心部分,但是同時API也提供了大量的其他方法來豐富表格的顯示.在此,大傢俱體在使用過程中進行運用就行.
//最後,寫完表格後,不要忘記進行寫操作,也就是常說的保存
wrb.write()
wrb.close();保存完後關閉相應資源是一個合格的程序員應該做的.
接下來,我們就來講述寫文件的另一方面:更新文件.有時候,並不僅僅只是需要新寫文件,可能需要對已有文件進行更新.這時候我們可以這麼來實現.
Workbook wb= Workbook.getWorkbook(modifyFile);
WritableWorkbook wrb = Workbook.createWorkbook(modifyFile, wb);
以上就實現了得到一個已存在的文件的可修改副本.
//得到第一個工作表
WritableSheet wrs = wrb.getSheet(0);
//得到A0單元格
Cell cell = Wrs.getCell(0,0);
//對單元格格式進行判斷
If (cell.getType()==CellType.LABEL){
Label label=(Label) cell;
label.setString(“u r modified.”);
}//modify end
//save excel
wrb.write();
wb.close();
wrb.close();
以上就簡單的完成了一次excel文件的修改.API中還提供了複製工作表,複製單元格等操作,大家可以通過查詢API來了解其具體的用法.我們可以從作者提供的包中得到很多關於如何使用API的示例.