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