今日我們已經將權限模塊與員工管理整合完畢,但下午有學習新的內容。將數據導出為excel表格,或從excel表格導入數據。這一項功能比較常用!在Windows平臺下微軟有為我們提供Office的COM套件,Apache為我們提供的poi正是為Java打造的Office套件。
微軟的OfficeCOM套件與ApachePOI的用法十分相似,所以這部分內容對我來說比較容易。我想大家學習的都很輕松,因為它用起來十分簡單。在我們開始之前需要先下載POI的jar包:http://poi.apache.org/ 。
一、POI(或OfficeCOM)結構
首先想一下Microsoft Excel 的工作表,它的結構是什么?想想...
哦,首先有一個以xls為后綴名的文件,打開文件看到多個sheet(表單),每個表單中有無數個單元格。
OK,通過上面一斷話,我們找出了三個核心單元,由廣入微依次為:*.xls文件、sheet表單、單元格。我們使用Office套件正是以這三個核心單元為操作主體。
二、創建excel文件
我們在創建excel文件時,需要先創建*.xls文件(在POI中為Workbook),然后創建Sheet,然后創建row(cells):
package cn.itcast.cc.excel.exports;
import java.io.FileOutputStream; import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.junit.Test;
/** * 測試類,每個方法都是獨立的。 * @author Administrator * */ public class ExportExcel {
/** * 測試WorkBook * @throws Exception */ @Test public void testCreateExcel() throws Exception{ // 創建Workbook Workbook wb = new HSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls"); // 寫出到文件 wb.write(fileOut); fileOut.close(); }
/** * 測試Sheet * @throws Exception */ @Test public void testCreateSheet() throws Exception{ Workbook wb = new HSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls"); // 創建sheet Sheet sheet = wb.createSheet("HelloWorld!"); // 設置第1列寬度,列號以0開始。 sheet.setColumnWidth(0,10000); wb.write(fileOut); fileOut.close(); }
/** * 測試Cell * @throws Exception */ @Test public void testCreateCell() throws Exception{ Workbook wb = new HSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream("C:/workbook.xls"); // 創建sheet Sheet sheet = wb.createSheet("HelloWorld!"); // 設置第1列寬度 sheet.setColumnWidth(0,10000); // 創建一行,行號以0開始。 Row row = sheet.createRow(0); // 單元格的樣式屬性 CellStyle style = wb.createCellStyle(); // 底邊表格線 style.setBorderBottom(CellStyle.BORDER_DOUBLE); style.setBottomBorderColor(IndexedColors.RED.getIndex()); style.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("m/d/yy h:mm")); // 創建一個單元格,參數為列號。 Cell cell = row.createCell(0); cell.setCellStyle(style); // 向單元格中添加各種類型數據 cell.setCellValue(new Date()); row.createCell(1).setCellValue(1.1); row.createCell(2).setCellValue("文本型"); row.createCell(3).setCellValue(true); row.createCell(4).setCellType(HSSFCell.CELL_TYPE_ERROR);
wb.write(fileOut); fileOut.close(); } } |
通過上面可見,我們必須一個單元格一個單元格的創建并添加數據。在實際應用中,尤其是辦公應用,經常需要將數據導出為excel文件,我們可以通過POI實現。還有很多的行業軟件使用專業的報表組件而非excel文件,那時我們就需要使用那個報表組件為我們提供的API才能實現對數據的導出或打印操作。
我們知道單元格的屬性比較多,如邊框和字體等,所以對cell操作的API就比較多。我們在這就不一一詳細列舉了,Apache的POI的文檔十分詳細!
二、讀取excel文件
我們創建excel文件時需要一個單元格一個單元格的創建并添加數據,同樣我們讀取excel文件時也需要一個一個單元格的讀取。某些情況下,需要將excel文件中的數據導入到數據庫中。注意此時的excel文件中表格格式必須是指定格式。
package cn.itcast.cc.excel.imports;
import java.io.FileInputStream; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.junit.Test;
/** * 測試類 * @author Administrator * */ public class ImportExcel {
/** * 讀取excel文件 * @throws Exception */ @Test public void testReadExcel() throws Exception { // 讀入文件 InputStream inp = new FileInputStream("C:/workbook.xls"); Workbook wb = WorkbookFactory.create(inp); // 獲取Sheet,索引從0開始。 Sheet sheet = wb.getSheetAt(0); // 遍歷所有Row for(Iterator<Row> items = sheet.rowIterator(); items.hasNext();){ Row row = items.next(); // 我們本可以使用row.cellIterator()遍歷每一個Cell,但我們需要獲取具體類型的數據 System.out.println(row.getCell(0).getDateCellValue()); System.out.println(row.getCell(1).getNumericCellValue()); System.out.println(row.getCell(2).getStringCellValue()); System.out.println(row.getCell(3).getBooleanCellValue()); System.out.println(row.getCell(4).getCellType()); } // 關閉文件 inp.close(); } } |
用起來十分簡單,明天還有好玩的!