jxl to 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

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的示例.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章