原創(chuàng)|其它|編輯:郝浩|2012-10-11 10:18:24.000|閱讀 849 次
概述:使用JExcel來產(chǎn)生EXCEL檔的方法,本文介紹了具體步驟,并附上代碼。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
上次談過了使用iText產(chǎn)生PDF檔,這次換成來談?wù)勈褂?a href="/zh-CN/product/1148/feature.aspx" target="_blank">JExcel來產(chǎn)生EXCEL檔的方法。
首先,先到他的SourceForge主頁面download相關(guān)的API檔案。
//sourceforge.net/projects/jexcelapi/
或
//fc6vip.cn/zh-CN/product/1148/download.aspx
當(dāng)然,他也是OpenSource的組件。
下列為其Tutorial教學(xué):
//www.andykhan.com/jexcelapi/tutorial.html
一切就緒后,那就準(zhǔn)備上路了。
下載下來的壓縮檔解開后,可以找到j(luò)xl.jar,先將此檔案加入你的Classpath中吧!
也就是整份的Excel檔案,可指定檔名。
Workbook workbook = Workbook.getWorkbook(new File("test.xls"));
也就是每個Excel檔案下面可以跳tag的sheet表。
Sheet sheet = workbook.createSheet("我的Excel表", 0);
第一個參數(shù)是sheet name,第二個參數(shù)是第幾張sheet,當(dāng)然index是由0開始算。
WritableFont chFont11w = new WritableFont(WritableFont.TIMES, 11); chFont11w.setColour(Colour.WHITE);
先建立一個WritableFont的instance,其constructor的第一個參數(shù)是指定字型,第二個是字號。
其中字型的部份,可以使用WritableFont所提供預(yù)設(shè)的一堆static常數(shù)來指定,也可以直接輸入string,比如打"標(biāo)楷體",到時產(chǎn)生的字型就會依照你所指定的來顯示。而setColour是指定此字型的顏色,這個部份就麻煩。(由colour這個字來看,很顯然的JExcel應(yīng)是英國相關(guān)的人開發(fā)的:P 反正總之不會是美國)
顏色為什么麻煩呢?在JExcel里面,Colour class并不提供public constructor讓user自己指定RGB的顏色,所以你只能從Colour中一堆的static常數(shù)顏色來指定,之前為了這個問題還研究了一下他的原始碼,果然是不行,他的constructor是protected的,就連繼承之后雖然可以指定rgb顏色,但是仍然沒有作用。(后來我看了一下Excel,發(fā)現(xiàn)原來這是因為Excel的標(biāo)準(zhǔn)調(diào)色盤就那些顏色
不像Word一樣可以讓使用者自訂顏色的關(guān)系)
查API doc就可以看到,他提供的顏色有:
static Colour AQUA static Colour AUTOMATIC static Colour BLACK static Colour BLUE static Colour BLUE_GREY static Colour BLUE2 static Colour BRIGHT_GREEN static Colour BROWN static Colour CORAL static Colour DARK_BLUE static Colour DARK_BLUE2 static Colour DARK_GREEN static Colour DARK_PURPLE static Colour DARK_RED static Colour DARK_RED2 static Colour DARK_TEAL static Colour DARK_YELLOW static Colour DEFAULT_BACKGROUND static Colour DEFAULT_BACKGROUND1 static Colour GOLD static Colour GRAY_25 static Colour GRAY_50 static Colour GRAY_80 static Colour GREEN static Colour GREY_25_PERCENT static Colour GREY_40_PERCENT static Colour GREY_50_PERCENT static Colour GREY_80_PERCENT static Colour ICE_BLUE static Colour INDIGO static Colour IVORY static Colour LAVENDER static Colour LIGHT_BLUE static Colour LIGHT_GREEN static Colour LIGHT_ORANGE static Colour LIGHT_TURQUOISE static Colour LIGHT_TURQUOISE2 static Colour LIME static Colour OCEAN_BLUE static Colour OLIVE_GREEN static Colour ORANGE static Colour PALE_BLUE static Colour PALETTE_BLACK static Colour PERIWINKLE static Colour PINK static Colour PINK2 static Colour PLUM static Colour PLUM2 static Colour RED static Colour ROSE static Colour SEA_GREEN static Colour SKY_BLUE static Colour TAN static Colour TEAL static Colour TEAL2 static Colour TURQOISE2 static Colour TURQUOISE static Colour UNKNOWN static Colour VERY_LIGHT_YELLOW static Colour VIOLET static Colour VIOLET2 static Colour WHITE static Colour YELLOW static Colour YELLOW2
上面列了這么多,哪知道哪一個真正的顏色是怎么樣?
除非自己邊試邊換才知,這太麻煩了,我寫了一只程序把所有的顏色都印出來:
好了,但問題來了,上面提供的顏色如果對比較龜毛的人而言(比如我...),
一定是不足使用的,但如剛剛上述說的,Colour不提供自訂顏色的功能,后來找了老半天文件,終于找到一個可以用的方式,就是在workbook中,提供了一個setColourRGB的method,但這個method并不是設(shè)定新的顏色,而是可以把上述提供的顏色重新覆寫其RGB設(shè)定值,這個方法雖然不是挺好,但是終于有救了!所以你就找個顏色來開刀,例如:
workbook.setColourRGB(Colour.DARK_GREEN, 0xDB, 0xF4, 0x8E);
我把DARK_GREEN的RGB改寫成#DBF48E (0x表示16進位)
(你要什么顏色而有什么16進位色碼,很多方法可以取得,比如:Photoshop、Dreamweaver等)
這樣一來,之后再使用Colour.DARK_GREEN,就會變成我們想要的顏色了。
WritableCellFormat cellFormat1 = new WritableCellFormat (); cellFormat1.setFont(chFont11w); cellFormat1.setBackground(Colour.DARK_GREEN); cellFormat1.setAlignment(Alignment.CENTRE); cellFormat1.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.GRAY_80);
這里呢,要先產(chǎn)生你要的cell的格式,例如指定字型setFont,把我們剛剛產(chǎn)生的白色11大小的TIMES指定進去,設(shè)定背景setBackground,把我們剛剛覆寫掉的DARK_GREEN指定進去,指定對齊方式setAlignment為置中,以及設(shè)定此cell的上下左右(Border.ALL)的框線以及顏色。
Label label = new Label(2, 3, "我是rexmen", cellFormat1); sheet.addCell(label);
此constructor的第一個參數(shù)是產(chǎn)生的儲存格的x的位置,2表示第3欄(index從0開始算)
第二個參數(shù)就是y的位置,3表示第4列。
用Excel的講法來說,就是「C4」那一格。
而第三個就是輸入的文字,而第四格就把我們剛剛產(chǎn)生的cell的format指定進去。
最后再把此label加入sheet中。使用addCell method。
把該作的都作完后,別忘了close掉文件,
workbook.write(); workbook.close();
先使用write()寫入后,再用colose關(guān)閉。
這樣就大功告成啰!最基本的JExcel就完成了。
其他的功能啦,插入圖片啦、試算的公式啦、有的沒的自己有空再試了!
若是在JSP上要讓User download這個動態(tài)產(chǎn)生的excel檔,要用Servlet RequestDispatcher的方式,若沒有設(shè)定正確表頭,導(dǎo)過去的檔案會會在browser上看到的是亂碥,要記得設(shè)定
response.setContentType("application/vnd.ms-excel");
再導(dǎo)到正確的excel檔案位置
RequestDispatcher view = request.getRequestDispatcher("test.xls"); view.forward(request, response);
如此以來,在網(wǎng)址列上不會show出 test.xls 的檔名 (會按照你在web.xml里設(shè)定的servlet對應(yīng)mapping檔名),
而且可以正確的在browser里看到Excel的內(nèi)容。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載