上一篇文章 Java操作Excel之理解JXL--讀取Excel 說到如何用JXL讀取Excel文件, 現(xiàn)在來看看如何讀取Excel模板然后把動態(tài)數(shù)據(jù)寫入到模板以生成特定格式的Excel。 同樣的思路,先來考慮下會涉及到那些對象,和上篇文章讀取相比這里涉及到一個寫入的步驟,所以JXL必然會提供一個對象 來支持寫入,這就是WritableWorkbook。那么如何得到到這個類的實(shí)例,查看APIDoc發(fā)現(xiàn)Workbook類提供了幾個 靜態(tài)的createWorkbook方法返回WritableWorkbook實(shí)例,可以看到眾多createWorkbook方法主要分為兩類:一個參數(shù) 和兩個參數(shù)。簡單分析可以得知前者僅僅是用來直接生成Excel文件,后者先讀取模板再向模板寫入數(shù)據(jù)然后生成Excel。 (還有一個三參數(shù)方法加上一個用來設(shè)置workbook的參數(shù)) 現(xiàn)在按照上篇文章中所講述的流程來看看讀取模板并寫入需要那些步驟。 第一步:選擇模板文件: Workbook wb = Workbook.getWorkbook(new File(realpath)); 第二步:通過模板得到一個可寫的Workbook: WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb); 第一個參數(shù)是一個輸出流對象,比如可以 ByteArrayOutputStream targetFile = new ByteArrayOutputStream(); 這樣定義這個輸出流對象。第二個參數(shù)代表了要讀取的模板。 第三步:選擇模板中名稱為StateResult的Sheet: WritableSheet wws = wwb.getSheet("StateResult"); 如果需要也可以創(chuàng)建Sheet WritableSheet wws = wwb.createSheet("Sheet名稱",i); 第四步:選擇單元格,寫入動態(tài)值,根據(jù)單元格的不同類型轉(zhuǎn)換成相應(yīng)類型的單元格: Label A1 = (Label)wws.getWritableCell(0,0); A1.setString("單元格內(nèi)容") 或 Number A2 = (Number)wws.getWritableCell(0,1);//Number是jxl.write.Number A2.setValue(3.3); 也可以創(chuàng)建新的單元格并且加入到Sheet中 Label C1 = new Label(2,0,"單元格內(nèi)容"); wws.addCell(C1); 或 Number C1 = new Number(2,0,3.3); wws.addCell(C1); 在生成Excel報表的時候還會遇到一種需求就是數(shù)據(jù)的格式問題,我們可能希望數(shù)值型單元格以某種格式顯示,而字符串型單元格以另 一種格式顯示。這些可以通過WritableFont、NumberFormat、WritableCellFormat等實(shí)現(xiàn),下例給單元格A1、A2添加了不同的格式。 java 代碼 WritableFont font= new WritableFont(WritableFont.createFont("宋體"),10,WritableFont.NO_BOLD); NumberFormat format = new NumberFormat("###,##0.00"); //NumberFormat是jxl.write.NumberFormat WritableCellFormat cellFormat1 = new WritableCellFormat(font,format); WritableCellFormat cellFormat2 = new WritableCellFormat(font); cellFormat1.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border cellFormat2.setBorder(Border.ALL, jxl.format.BorderLineStyle.THIN); //Border是jxl.format.Border A2.setCellFormat(cellFormat1); A1.setCellFormat(cellFormat2); 還有不要忘記關(guān)閉WritableWorkbook和Workbook以釋放資源: wwb.close(); wb.close(); 最后就可以你需要的方式從輸出流targetFile中取得Excel,比如直接生成文件存本地,輸出到客戶端瀏覽器等。 如果還有其他需求,按照這種思路,再參照APIDoc相信可以很容易的解決。 至此,Java操作Excel之理解JXL就寫完了。下一篇會介紹如何用Jakarta POI操作Excel。 |
|
來自: nbtymm > 《Java開源項目》