版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> POI操作Excel----------(轉(zhuǎn)載)</p><p> java當(dāng)初把核心處理設(shè)成Unicode,帶來的好處是另代碼適應(yīng)了多語言環(huán)境。然而由于老外的英語只有26個字母,有些情況下,一些程序員用8 位的byte處理,一不小心就去掉了CJK的高位?;蛘呤怯捎诹?xí)慣在程序中采用硬編碼,還有多種原因,使得許多java應(yīng)用在CJK的處理上很煩惱。期貨開戶流程還好 在POI HSSF中考慮到
2、這個問題,可以設(shè)置encoding為雙字節(jié)。POI可以到www.apache.org下載到。編譯好的jar主要有這樣4個:poi包,poi Browser包,poi hdf包,poi hssf例程包。實際運行時,需要有poi包就可以了。如果用Jakarta ant編譯和運行,下載apache Jakarta POI的release中的src包,它里面已經(jīng)為你生成好了build文件了。只要運行ant就可以了(ant 的安裝和使用在此不
3、說了)。如果是用Jbuilder 運行,請在新建的項目中加入poi包。以Jbuilder6為例,選擇Tools菜單項的config libraries...選項,新建一個lib。在彈出的菜單中選擇poi包,如這個jakarta-poi-</p><p> [java] view plaincopyprint?</p><p> <span style="fon
4、t-family:Microsoft YaHei;font-size:12px;color:#333333;">Java代碼 </p><p> import org.apache.poi.hssf.usermodel.HSSFWorkbook; </p><p&g
5、t; import java.io.FileOutputStream; </p><p> import java.io.IOException; </p><p> public class NewWorkbook &
6、#160;</p><p><b> { </b></p><p> public static void main(String[] args) </p><p> throws IOExcept
7、ion </p><p><b> { </b></p><p> HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook對象 &l
8、t;/p><p> FileOutputStream fileOut = new FileOutputStream("workbook.xls"); </p><p> wb.write(fileOut);//把Workbook對象輸出到文件workbook.xls中
9、60; </p><p> fileOut.close(); </p><p><b> } </b></p><p><b> } </b></p&
10、gt;<p> 通過這個例子,商品期貨開戶我們建立的是一個空白的xls文件(不是空文件)。在此基礎(chǔ)上,我們可以進一步看其它的例子。 </p><p> import org.apache.poi.hssf.usermodel.*; </p><p> import
11、60;java.io.FileOutputStream; </p><p> import java.io.IOException; </p><p> public class CreateCells </p&g
12、t;<p><b> { </b></p><p> public static void main(String[] args) </p><p> throws IOException
13、0; </p><p><b> { </b></p><p> HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook對象 </p><
14、;p> HSSFSheet sheet = wb.createSheet("new sheet");//建立新的sheet對象 </p><p> // Create a row and put some cells
15、in it. Rows are 0 based. </p><p> HSSFRow row = sheet.createRow((short)0);//建立新行 </p><p> // Create
16、 a cell and put a value in it. </p><p> HSSFCell cell = row.createCell((short)0);//建立新cell </p>
17、<p> cell.setCellValue(1);//設(shè)置cell的整數(shù)類型的值 </p><p> // Or do it on one line. </p><p> row.createCell((short)1
18、).setCellValue(1.2);//設(shè)置cell浮點類型的值 </p><p> row.createCell((short)2).setCellValue("test");//設(shè)置cell字符類型的值 </p><p> row.createCell((shor
19、t)3).setCellValue(true);//設(shè)置cell布爾類型的值 </p><p> HSSFCellStyle cellStyle = wb.createCellStyle();//建立新的cell樣式 </p><p> cellStyle.se
20、tDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));//設(shè)置cell樣式為定制的日期格式 </p><p> HSSFCell dCell =row.createCell((short)4); </p>
21、<p> dCell.setCellValue(new Date());//設(shè)置cell為日期類型的值 </p><p> dCell.setCellStyle(cellStyle); //設(shè)置該cell日期的顯示格式 </p><p> HSSFCell&
22、#160;csCell =row.createCell((short)5); </p><p> csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//設(shè)置cell編碼解決中文高位字節(jié)截斷 </p><p> csCell.setCellVal
23、ue("中文測試_Chinese Words Test");//設(shè)置中西文結(jié)合字符串 </p><p> row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建立錯誤cell </p>
24、<p> // Write the output to a file </p><p> FileOutputStream fileOut = new FileOutputStream("workbook.xls");
25、160; </p><p> wb.write(fileOut); </p><p> fileOut.close(); </p><p><b> } </b></p>
26、;<p><b> } </b></p><p> 我稍微修改了原來的examples包中的CreateCells類寫了上面的功能測試類。通過這個例子,我們可以清楚的看到xls文件從大到小包 括了HSSFWorkbook HSSFSheet HSSFRow HSSFCell這樣幾個對象。我
27、們可以在cell中設(shè)置各種類型的值。尤其要注意的是如果你想正確的顯示非歐美的字符時,尤其象中日韓這樣的語言,必須 股指期貨開戶設(shè)置編碼為16位的即是HSSFCell.ENCODING_UTF_16,才能保證字符的高8位不被截斷而引起編碼失真形成亂碼。 </p><p> 其他測試可以通過參考examples包中的測試?yán)诱莆誴oi的詳細(xì)用法,包括字體的設(shè)置
28、,cell大小和低紋的設(shè)置等。需要注意的是POI是一 個仍然在完善中的公開代碼的項目,所以有些功能正在不斷的擴充。如HSSFSheet的getFooter() getHeader()和setFooter(HSSFFooter hsf) setHeader(HSSFHeader hsh)是在POI1.7中才有的,而POI1.5中就沒有。運行測試熟悉代碼或者使用它做項目時請注意POI的版本。
29、 </p><p> 另外需要注意的是HSSF也有它的對xls基于事件的解析。可以參考例程中的EventExample.java。它通過實現(xiàn) HSSFListener完成從普通流認(rèn)知Xls中包含的內(nèi)容,在apache Cocoon中的org.apache.cocoon.serialization.HSSFSerializer中用到了這個解析。因為
30、Cocoon2 是基于事件的,所以POI為了提供快速的解析也提供了相應(yīng)的事件。當(dāng)然我們自己也可以實現(xiàn)這個事件接口。 </p><p> 因為POI還不是一個足夠成熟的項目,所以有必要做進一步的開發(fā)和測試。但是它已經(jīng)為我們用純java操作ole2對象提供了可能,而且克服了ole對象調(diào)用的缺陷,提供了服務(wù)器端的Excel解決方案。
31、60; </p><p> ====================================================== </p><p> 利用Java 創(chuàng)建和讀取Excel文檔 </p><p> 為了保證示例程序的運
32、行,必須安裝Java 2 sdk1.4.0 和Jakarta POI,Jakarta POI的Web站點是: http://jakarta.apache.org/poi/ </p><p> 示例1將演示如何利用Jakarta POI API 創(chuàng)建Excel 文檔。
33、 </p><p> 示例1程序如下: </p><p> import org.apache.poi.hssf.usermodel.HSSFWorkbook; </p><p> import org.
34、apache.poi.hssf.usermodel.HSSFSheet; </p><p> import org.apache.poi.hssf.usermodel.HSSFRow; </p><p> import org.apache.poi.hssf.usermode
35、l.HSSFCell; </p><p> import java.io.FileOutputStream; </p><p> public class CreateXL { </p><
36、p> /** Excel 文件要存放的位置,假定在D盤JTest目錄下*/ </p><p> public static String outputFile="D:/JTest/ gongye.xls"; </p>&
37、lt;p> public static void main(String argv[]) </p><p><b> { </b></p><p><b> try &l
38、t;/b></p><p><b> { </b></p><p> // 創(chuàng)建新的Excel 工作簿 </p><p> HSSFWorkbook workbook = new
39、HSSFWorkbook(); </p><p> // 在Excel工作簿中建一工作表,其名為缺省值 </p><p> // 如要新建一名為"效益指標(biāo)"的工作表,其語句為: </p>&l
40、t;p> // HSSFSheet sheet = workbook.createSheet("效益指標(biāo)"); </p><p> HSSFSheet sheet = workbook.createSheet(); <
41、;/p><p> // 在索引0的位置創(chuàng)建行(最頂端的行) </p><p> HSSFRow row = sheet.createRow((short)0); </p><p> //在索引0的位置創(chuàng)建單元格(左上端)
42、 </p><p> HSSFCell cell = row.createCell((short) 0); </p><p> // 定義單元格為字符串類型 </p><p> ce
43、ll.setCellType(HSSFCell.CELL_TYPE_STRING); </p><p> // 在單元格中輸入一些內(nèi)容 </p><p> cell.setCellValue("增加值"); </
44、p><p> // 新建一輸出文件流 </p><p> FileOutputStream fOut = new FileOutputStream(outputFile); </p><p> // 把相應(yīng)的Ex
45、cel 工作簿存盤 </p><p> workbook.write(fOut); </p><p> fOut.flush(); </p><p> // 操作結(jié)束,關(guān)閉文件
46、 </p><p> fOut.close(); </p><p> System.out.println("文件生成..."); </p><p> }catch(Exception e) { &
47、#160; </p><p> System.out.println("已運行 xlCreate() : " + e ); </p><p><b> } </b><
48、/p><p><b> } </b></p><p><b> } </b></p><p> 讀取Excel文檔中的數(shù)據(jù) </p><p> 示例2將演示如
49、何讀取Excel文檔中的數(shù)據(jù)。假定在D盤JTest目錄下有一個文件名為gongye.xls的Excel文件。 </p><p> 示例2程序如下: </p><p> import org.apache.poi.hssf.usermodel.HSSFWorkbook;
50、60; </p><p> import org.apache.poi.hssf.usermodel.HSSFSheet; </p><p> import org.apache.poi.hssf.usermodel.HSSFRow; </p>
51、;<p> import org.apache.poi.hssf.usermodel.HSSFCell; </p><p> import java.io.FileInputStream; </p><p> public class Re
52、adXL { </p><p> /** Excel文件的存放位置。注意是正斜線*/ </p><p> public static String fileToBeRead="D:/JTest/ gongye.xls"
53、;; </p><p> public static void main(String argv[]){ </p><p><b> try{ </b></p>
54、<p> // 創(chuàng)建對Excel工作簿文件的引用 </p><p> HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead)); </p>
55、<p> // 創(chuàng)建對工作表的引用。 </p><p> // 本例是按名引用(讓我們假定那張表有著缺省名"Sheet1") </p><p> HSSFSheet sheet = workbook.getSh
56、eet("Sheet1"); </p><p> // 也可用getSheetAt(int index)按索引引用, </p><p> // 在Excel文檔中,第一張工作表的缺省索引是0, &
57、lt;/p><p> // 其語句為:HSSFSheet sheet = workbook.getSheetAt(0); </p><p> // 讀取左上端單元 </p><p> HSSFRow row
58、160;= sheet.getRow(0); </p><p> HSSFCell cell = row.getCell((short)0); </p><p> // 輸出單元內(nèi)容,cell.getStringCellValue()就是取所在單
59、元的值 </p><p> System.out.println("左上端單元是: " + cell.getStringCellValue()); </p><p> }catch(Exception e) {&
60、#160; </p><p> System.out.println("已運行xlRead() : " + e ); </p><p><b> } </b></p
61、><p><b> } </b></p><p><b> } </b></p><p> 設(shè)置單元格格式 </p><p> 在這里,我們將只介紹一些和格式
62、設(shè)置有關(guān)的語句,我們假定workbook就是對一個工作簿的引用。在Java </p><p> 中,第一步要做的就是創(chuàng)建和設(shè)置字體和單元格的格式,然后再應(yīng)用這些格式: </p><p> 1、創(chuàng)建字體,設(shè)置其為紅色、粗體: </p>&
63、lt;p> HSSFFont font = workbook.createFont(); </p><p> font.setColor(HSSFFont.COLOR_RED); </p><p> font.setBoldweight(HSSFFont.B
64、OLDWEIGHT_BOLD); </p><p> 2、創(chuàng)建格式 </p><p> HSSFCellStyle cellStyle= workbook.createCellStyle(); </p><p&
65、gt; cellStyle.setFont(font); </p><p> 3、應(yīng)用格式 </p><p> HSSFCell cell = row.createCell((short) 0);
66、;</p><p> cell.setCellStyle(cellStyle); </p><p> cell.setCellType(HSSFCell.CELL_TYPE_STRING); </p><p> cell.setCellValue("標(biāo)題
67、60;"); </p><p> 總之,如本篇文章所演示的一樣,Java程序員不必?fù)?dān)心Excel工作表中的數(shù)據(jù)了,利用Jakarta POI API, </p><p> 我們就可以輕易的在程序中存取Excel文檔。 &
68、lt;/p><p> ============================================== </p><p> 首先說說現(xiàn)在我所知道的Java編輯Excel文件的兩大開源工具: </p><p> jakarta POI和JavaExcel
69、API(簡稱JXL),這兩套工具我都試用了一這段時間,感覺各有優(yōu)劣吧。POI在某些細(xì)節(jié)有些小Bug并且不支持寫入圖片,其他方面都挺不錯的; </p><p> JXL就慘了,除了支持寫入圖片外,我暫時看不到它比POI好的地方,我碰到的主要的問題就是對公式支持不是很好,很多帶有公式的Excel文件用 JXL打開后,公式就丟失了(比如now(),today()
70、),在網(wǎng)上看到其他大蝦評論說JXL寫入公式也有問題,另外,JXL操作Excel文件的效 率比POI低一點。經(jīng)過比較后,我選擇了POI開發(fā)我的項目。 </p><p> 現(xiàn)在我要做的東西基本完成啦,我把這段時間使用POI的一些心得總結(jié)出來,希望能對和我遇到相同問題的朋友有所幫助,至于POI基本的使用方法,自己去看文檔吧。 &
71、#160;</p><p> 1、設(shè)置分頁符的bug </p><p> POI里的HSSFSheet類提供了setRowBreak方法可以設(shè)置Sheet的分頁符。 </p><p> Bug:如果你要設(shè)置分頁符的Sheet是本來就有的,并且你沒有在里面插入過分頁符,那
72、么調(diào)用setRowBreak時POI會拋出空指針的異常。 </p><p> 解決方法:在Excel里給這個sheet插入一個分頁符,用POI打開后再把它刪掉,然后你就可以隨意插入分頁符了。 </p><p> 如果sheet是由POI生成的則沒有這個問題。我跟蹤了setRowBreak的源代碼
73、,發(fā)現(xiàn)是Sheet.Java下的 PageBreakRecord rowBreaks這個變量在搞鬼,如果Sheet里原來沒有分頁符,開發(fā)這個模塊的那位兄臺忘了為這個對象new實例,所以只能我們先手工給Excel 插入一個分頁符來觸發(fā)POI為rowBreaks創(chuàng)建實例。 </p><p> 2、如何拷貝行
74、; </p><p> 我在gmane.org的POI用戶論壇翻遍了每個相關(guān)的帖子,找遍了api,也沒看到一個拷貝行的方法,沒辦法,只能自己寫: </p><p> //注:this.fWorkbook是一個HSSHWorkbook,請自行在外部new </p><
75、;p> public void copyRows </p><p> (String pSourceSheetName, </p><p> String pTargetSheetName,
76、; </p><p> int pStartRow, int pEndRow, </p><p> int pPosition) </p><p><b> { &
77、lt;/b></p><p> HSSFRow sourceRow = null; </p><p> HSSFRow targetRow = null; </p><p> HSSFCell
78、sourceCell = null; </p><p> HSSFCell targetCell = null; </p><p> HSSFSheet sourceSheet = null;
79、 </p><p> HSSFSheet targetSheet = null; </p><p> Region region = null; </p><p> int cT
80、ype; </p><p> int i; </p><p> short j; </p><p> int targetRowFrom; <
81、/p><p> int targetRowTo; </p><p> if ((pStartRow == -1) || (pEndRow == -1)) </p><p><b> {
82、 </b></p><p> return; </p><p><b> } </b></p><p> sourceSheet = this.fWorkbook.get
83、Sheet(pSourceSheetName); </p><p> targetSheet = this.fWorkbook.getSheet(pTargetSheetName); </p><p> //拷貝合并的單元格 &
84、lt;/p><p> for (i = 0; i < sourceSheet.getNumMergedRegions(); i++) </p><p><b> { </b></p>&l
85、t;p> region = sourceSheet.getMergedRegionAt(i); </p><p> if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <=
86、;pEndRow)) </p><p><b> { </b></p><p> targetRowFrom = region.getRowFrom() - pStartRow + pPosition;
87、 </p><p> targetRowTo = region.getRowTo() - pStartRow + pPosition; </p><p> region.setRowFrom(targetRowFrom); &
88、#160; </p><p> region.setRowTo(targetRowTo); </p><p> targetSheet.addMergedRegion(region); </p><p><b> }
89、; </b></p><p><b> } </b></p><p> //設(shè)置列寬 </p><p> for (i = pStartRow; i <=&
90、#160;pEndRow; i++) </p><p><b> { </b></p><p> sourceRow = sourceSheet.getRow(i); </p><
91、;p> if (sourceRow != null) </p><p><b> { </b></p><p> for (j = sourceRow.getFirstCellNum(); j
92、160;< sourceRow.getLastCellNum(); j++) </p><p><b> { </b></p><p> targetSheet.setColumnWidth(j, sourceSheet.getColum
93、nWidth(j)); </p><p><b> } </b></p><p> break; </p><p><b> } </b&g
94、t;</p><p><b> } </b></p><p> //拷貝行并填充數(shù)據(jù) </p><p> for (;i <= pEndRow; i++)
95、;</p><p><b> { </b></p><p> sourceRow = sourceSheet.getRow(i); </p><p> if (sourceRow == null)&
96、#160; </p><p><b> { </b></p><p> continue; </p><p><b> } </b></p&
97、gt;<p> targetRow = targetSheet.createRow(i - pStartRow + pPosition); </p><p> targetRow.setHeight(sourceRow.getHeight());
98、;</p><p> for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++) </p><p><b> { <
99、;/b></p><p> sourceCell = sourceRow.getCell(j); </p><p> if (sourceCell == null) </p><p><b> {
100、0; </b></p><p> continue; </p><p><b> } </b></p><p> targetCell = targetRow.createCell(
101、j); </p><p> targetCell.setEncoding(sourceCell.getEncoding()); </p><p> targetCell.setCellStyle(sourceCell.getCellStyle());
102、;</p><p> cType = sourceCell.getCellType(); </p><p> targetCell.setCellType(cType); </p><p> switch (cType)
103、0; </p><p><b> { </b></p><p> case HSSFCell.CELL_TYPE_BOOLEAN: </p><p> targetCell.setCellValue(so
104、urceCell.getBooleanCellValue()); </p><p> break; </p><p> case HSSFCell.CELL_TYPE_ERROR: </p><p> target
105、Cell.setCellErrorValue(sourceCell.getErrorCellValue()); </p><p> break; </p><
106、p> case HSSFCell.CELL_TYPE_FORMULA: </p><p> //parseFormula這個函數(shù)的用途在后面說明 </p><p> targetCell.setCellFormula(parseFormula(sourceCell.getCe
107、llFormula())); </p><p> break; </p><p> case HSSFCell.CELL_TYPE_NUMERIC: </p><p> targetCell.setCellValu
108、e(sourceCell.getNumericCellValue()); </p><p> break; </p><p> case HSSFCell.CELL_TYPE_STRING: </p><p> t
109、argetCell.setCellValue(sourceCell.getStringCellValue()); </p><p> break; </p><p><b> } </b></p><p>
110、;<b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> 這個函數(shù)有兩個問題暫時無法解決:
111、 </p><p> a、只能在同一個Workbook里面使用,跨Workbook總是拷不過去,不知道為什么? </p><p> b、由于在拷貝行時也把行高也拷過去了,如果往這些單元格里寫入的數(shù)據(jù)長度超過單元格長度,那么他們不會自動調(diào)整行高! &l
112、t;/p><p> 3、公式的問題 </p><p> POI對Excel公式的支持是相當(dāng)好的,但是我發(fā)現(xiàn)一個問題,如果公式里面的函數(shù)不帶參數(shù),比如now()或today(),那么你通過 getCellFormula()取出來的值就是now(ATTR(semiVolatile))和today(ATTR (semiVolati
113、le)),這樣的值寫入Excel是會出錯的,這也是我上面copyRow的函數(shù)在寫入公式前要調(diào)用parseFormula的原 因,parseFormula這個函數(shù)的功能很簡單,就是把ATTR(semiVolatile)刪掉,我把它的代碼貼出來: </p><p> private String parseFormula(String
114、60;pPOIFormula) </p><p><b> { </b></p><p> final String cstReplaceString = "ATTR(semiVolatile)"; //
115、$NON-NLS-1$ </p><p> StringBuffer result = null; </p><p> int index; </p><p> result
116、0;= new StringBuffer(); </p><p> index = pPOIFormula.indexOf(cstReplaceString); </p><p> if (index >= 0)
117、0; </p><p><b> { </b></p><p> result.append(pPOIFormula.substring(0, index)); </p><p> result.appe
118、nd(pPOIFormula.substring(index + cstReplaceString.length())); </p><p><b> } </b></p><p><b> else
119、0;</b></p><p><b> { </b></p><p> result.append(pPOIFormula); </p><p><b> } </b>
120、</p><p> return result.toString(); </p><p><b> } </b></p><p> 至于為什么會出現(xiàn)ATTR(semiVolatile),還需要大家的探索精神!
121、60; </p><p> 4、向Excel寫入圖片的問題。 </p><p> 我上POI論壇查相關(guān)帖子,得到兩種結(jié)論: </p><p> 1、不支持寫入圖片; </p><p> 2
122、、支持寫入圖片,通過EscherGraphics2d這個Class實現(xiàn)。于是我就去查EscherGraphics2d這個Class,發(fā)現(xiàn) 這個Class提供了N個drawImage方法,喜出望外的我開始寫代碼,結(jié)果調(diào)了一天,一直看不到效果,黔驢技窮的我在萬般無奈下只好跟蹤進 drawImage這個函數(shù)內(nèi)部,經(jīng)過N個函數(shù)調(diào)用后在最底層函數(shù)發(fā)現(xiàn)了最終答案: </p>
123、;<p> public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, </p><
124、p> int sx2, int sy2, Color bgColor, ImageObserver imageobserver) </p><p><b> { </b></p><p> if&
125、#160;(logger.check( POILogger.WARN )) </p><p> logger.log(POILogger.WARN,"drawImage() not supported"); </p><p> retu
126、rn true; </p><p><b> } </b></p><p> 所以我強烈建議大家,以后使用第三方開發(fā)包一定盡量下載它的源代碼,這樣你在碰到問題時,看看它的的內(nèi)部是怎么實現(xiàn)的,很多時候就可以不必重蹈我的 覆轍了。既然POI不能寫入圖片,那我
127、們只能把目光投向JXL,我用JXL寫入圖片功能是實現(xiàn)了,付出的代價是now()和today()這些函數(shù)丟失掉 了,魚與熊掌不能兼得吧。 </p><p> ==========================jsp操作=============================== </p><
128、;p> <%@ page contentType="application/msexcel;charset=gb2312" %> </p><p> response.setHeader("Content-disposition","inline; file
129、name=test1.xls"); </p><p> //以上這行設(shè)定傳送到前端瀏覽器時的檔名為test1.xls </p><p> //就是靠這一行,讓前端瀏覽器以為接收到一個excel檔 </p><p>
130、; 下面正常顯示要轉(zhuǎn)化的表 </p><p> -------------------------------------------------------------------------- </p><p><b> 介紹: &l
131、t;/b></p><p> Jakarta_POI 使用Java讀寫Excel(97-2002)文件,可以滿足大部分的需要。 </p><p> 因為剛好有一個項目使用到了這個工具,花了點時間順便翻譯了一下POI本身 </p><p> 帶的一個Gui
132、de.有一些節(jié)減和修改,希望給使用這個項目的人一些入門幫助。 </p><p> POI 下面有幾個自項目:HSSF用來實現(xiàn)Excel 的讀寫.以下是HSSF的主頁 </p><p> http://jakarta.apache.org/poi/hssf/index.html
133、 </p><p> 下面的介紹是基于以下地址的翻譯: </p><p> http://jakarta.apache.org/poi/hssf/quick-guide.html </p><p> 目前的版本為1.51
134、應(yīng)該是很長時間之內(nèi)的一個穩(wěn)定版,但HSSF提供的Sample不是基于 </p><p> 1.51所寫,所以使用的時候需要適當(dāng)?shù)淖⒁? </p><p> 其實POI下面的幾個子項目側(cè)重不同讀寫 Word 的HDF正在開發(fā)當(dāng)中.
135、</p><p> XML下的FOP(http://xml.apache.org/fop/index.html) </p><p> 可以輸出pdf文件,也是比較好的一個工具 </p><p><b> 目錄:
136、</b></p><p> 創(chuàng)建一個workbook </p><p> 創(chuàng)建一個sheet </p><p> 創(chuàng)建cells </p><p> 創(chuàng)建日期cells
137、60; </p><p> 設(shè)定單元格格式 </p><p><b> 說明: </b></p><p> 以下可能需要使用到如下的類 </p><p>
138、 import org.apache.poi.hssf.usermodel.HSSFCell; </p><p> import org.apache.poi.hssf.usermodel.HSSFCellStyle; </p><p> import org.ap
139、ache.poi.hssf.usermodel.HSSFDataFormat; </p><p> import org.apache.poi.hssf.usermodel.HSSFFont; </p><p> import org.apache.poi.hssf.user
140、model.HSSFRow; </p><p> import org.apache.poi.hssf.usermodel.HSSFSheet; </p><p> import org.apache.poi.hssf.usermodel.HSSFWorkbook;
141、; </p><p> import org.apache.poi.hssf.util.HSSFColor; </p><p> 創(chuàng)建workbook </p><p> HSSFWorkbook wb =
142、 new HSSFWorkbook(); </p><p> //使用默認(rèn)的構(gòu)造方法創(chuàng)建workbook </p><p> FileOutputStream fileOut = new FileOutputStream("
143、workbook.xls"); </p><p> //指定文件名 </p><p> wb.write(fileOut); </p><p> //輸出到文件 &
144、lt;/p><p> fileOut.close(); </p><p> 創(chuàng)建一個sheet </p><p> HSSFWorkbook wb = new HSSFWorkbook();
145、0;</p><p> HSSFSheet sheet1 = wb.createSheet("new sheet"); </p><p> //workbook創(chuàng)建sheet </p><p> HSSFSh
146、eet sheet2 = wb.createSheet("second sheet"); </p><p> //workbook創(chuàng)建另外的sheet </p><p> FileOutputStream fileOut
147、160;= new FileOutputStream("workbook.xls"); </p><p> wb.write(fileOut); </p><p> fileOut.close(); </
148、p><p> 創(chuàng)建cells </p><p> HSSFWorkbook wb = new HSSFWorkbook(); </p><p> HSSFSheet sheet = wb.createSh
149、eet("new sheet"); </p><p> //注意以下的代碼很多方法的參數(shù)是short 而不是int 所以需要做一次類型轉(zhuǎn)換 </p><p> HSSFRow row = sheet.createR
150、ow((short)0); </p><p> //sheet 創(chuàng)建一行 </p><p> HSSFCell cell = row.createCell((short)0); </p><
151、;p> //行創(chuàng)建一個單元格 </p><p> cell.setCellValue(1); </p><p> //設(shè)定單元格的值 </p><p> //值的類型參數(shù)有多中double ,Strin
152、g ,boolean, </p><p> row.createCell((short)1).setCellValue(1.2); </p><p> row.createCell((short)2).setCellValue("This is a
153、60;string"); </p><p> row.createCell((short)3).setCellValue(true); </p><p> // Write the output to a file
154、 </p><p> FileOutputStream fileOut = new FileOutputStream("workbook.xls"); </p><p> wb.write(fileOut); &
155、#160;</p><p> fileOut.close(); </p><p> 創(chuàng)建日期cells </p><p> HSSFWorkbook wb = new HSSFWorkbook();
156、0; </p><p> HSSFSheet sheet = wb.createSheet("new sheet"); </p><p> HSSFRow row = sheet.createRow((short)0);
157、; </p><p> HSSFCell cell = row.createCell((short)0); </p><p> //設(shè)定值為日期 </p><p> cell.setCellValue(new
158、0;Date()); </p><p> HSSFCellStyle cellStyle = wb.createCellStyle(); </p><p> //指定日期顯示格式 </p><p&g
159、t; cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm")); </p><p> cell = row.createCell((short)1); </p><p>
160、cell.setCellValue(new Date()); </p><p> //設(shè)定單元格日期顯示格式 </p><p> cell.setCellStyle(cellStyle); </p><p> F
161、ileOutputStream fileOut = new FileOutputStream("workbook.xls"); </p><p> wb.write(fileOut); </p><p> fileOut.close()
162、; </p><p> 設(shè)定單元格格式 </p><p> 單元格格式的設(shè)定有很多形式包括單元格的對齊方式,內(nèi)容的字體設(shè)置, </p><p> 單元格的背景色等,因為形式比較多,只舉一些例子.以下的例子在
163、60; </p><p> POI1.5中可能會有所改變具體查看API. </p><p> .......... </p><p> // Aqua background <
164、;/p><p> HSSFCellStyle style = wb.createCellStyle(); </p><p> //創(chuàng)建一個樣式 </p><p> style.setFillBackgroundColor(HSSFCellSt
165、yle.AQUA); </p><p> //設(shè)定此樣式的的背景顏色填充 </p><p> style.setFillPattern(HSSFCellStyle.BIG_SPOTS); </p><p> //樣式的填充
166、類型。 </p><p> //有多種式樣如: </p><p> //HSSFCellStyle.BIG_SPOTS </p><p> //HSSFCellStyle.FINE_DOTS &
167、#160; </p><p> //HSSFCellStyle.SPARSE_DOTS等 </p><p> style.setAlignment(HSSFCellStyle.ALIGN_CENTER ); </p><p> //居中對齊
168、0; </p><p> style.setFillBackgroundColor(HSSFColor.GREEN.index); </p><p> //設(shè)定單元個背景顏色 </p><p> style.setFillForeg
169、roundColor(HSSFColor.RED.index); </p><p> //設(shè)置單元格顯示顏色 </p><p> HSSFCell cell = row.createCell((short) 1);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- poi操作excel大全
- poi導(dǎo)入導(dǎo)出excel文件
- poi控制excel方法技術(shù)
- excel操作技巧
- excel操作大全
- vb操作excel
- excel操作題庫
- excel操作技巧培訓(xùn)
- 鍵盤操作excel表格
- python對excel操作教程
- excel操作練習(xí)題
- excel操作題庫 新
- excel操作題題目
- excel操作練習(xí)題
- excel上機操作試題
- excel函數(shù)學(xué)習(xí)(高級)_excel操作使用技巧大全
- excel表格的基本操作實例
- excel操作技巧與實例(大全)
- excel表格的各種基本操作
- excel操作指南描述統(tǒng)計
評論
0/150
提交評論