關于POI
POI是Apache的一個開源項目,起初的目标是允許使用者使用java代碼來對Excel進行操作,發展到今天POI本身支援的範圍已經逐漸擴充到對Microsoft Office主要産品,包括:Excel\Word\PPT\Visio的全面支援,目前穩定版本為3.7,開發版本為3.8。
應用場景
本文僅對項目中遇到的,使用已有Excel作為模闆的場景來進行描述。
代碼示例
public void demo(){ try { // 先讀取模闆 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream( "c://demo_template.xls")); // 基于模闆建立workbook HSSFWorkbook workbook = new HSSFWorkbook(fs); // 如果模闆存在多頁的話可以分别取到 HSSFSheet sheet_1st = workbook.getSheetAt(0); HSSFSheet sheet_2nd = workbook.getSheetAt(1); // 第一頁,第一行 HSSFRow row = sheet_1st.getRow(0); // 取第一個單元格 HSSFCell cell = row.getCell(0); // 擷取單元格字元串值 String cellValue = cell.getStringCellValue(); // 設定單元格的值 cell.setCellValue("demo"); // 設定單元格的樣式 HSSFCellStyle cellStyle = workbook.createCellStyle(); cell.setCellStyle(cellStyle); // 使用公式設定文檔内超連結 cell.setCellFormula( "HYPERLINK(\"#内容!A1\", \"demo\")"); // 使用HSSFHyperlink對象設定URL超連結 HSSFHyperlink link = new HSSFHyperlin(HSSFHyperlink.LINK_URL); cell.setHyperlink(link); String path = "c://demo.xls"; // 輸出Excel FileOutputStream stream = new FileOutputStream(path); workbook.write(stream); stream.flush(); stream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { } }
特别注意
1. POI讀取空行空格問題
POI對空行或空格是不做處理的,如果Excel模闆中第一行和第三行有資料的話,下面的代碼: HSSFRow row = sheet_1st.getRow(1); 取到的是第三行。如果想對第二行進行操作時,需要先建立一行: HSSFRow row_2nd = sheet_2nd.createRow(1); 同樣,單元格的規則也是一樣,通過 row.getCell(index)方法未必是想要的單元格,在使用Excel模闆時要特别注意。
2. CellStyle優化 同樣的CellStyle在workbook中的存在緩存的,具有同樣格式的單元格隻要複用一份CellStyle即可,不要對每個單元格都重新建立CellStyle執行個體。
本文轉自william_xu 51CTO部落格,原文連結:http://blog.51cto.com/williamx/735377,如需轉載請自行聯系原作者