1. 程式人生 > >Java讀寫Excel之POI超入門

Java讀寫Excel之POI超入門


Apache POI 是建立和維護操作各種符合Office Open XML(OOXML)標準和微軟的OLE 2複合文件格式(OLE2)的Java API。用它可以使用Java讀取和建立,修改MS Excel檔案.而且,還可以使用Java讀取和建立MS Word和MSPowerPoint檔案。Apache POI 提供Java操作Excel解決方案(適用於Excel97-2008)。 

如果處理.xlsx、docx、pptx的話可以試試Docx4j 。 
Docx4j is a Java library for creating and manipulating Microsoft Open XML (Word docx, Powerpoint pptx, and Excel xlsx) files.
 

  • HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。
  • XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。
  • HWPF - 提供讀寫Microsoft Word DOC格式檔案的功能。
  • HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
  • HDGF - 提供讀Microsoft Visio格式檔案的功能。
  • HPBF - 提供讀Microsoft Publisher格式檔案的功能。
  • HSMF - 提供讀Microsoft Outlook格式檔案的功能。

http://poi.apache.org/ 

Busy Developers' Guide to HSSF and XSSF Features
 

版本:poi-3.8-20120326.jar 

1、生成Workbook 
Java程式碼  收藏程式碼
  1. //生成Workbook  
  2. HSSFWorkbook wb = new HSSFWorkbook();  
  3. //新增Worksheet(不新增sheet時生成的xls檔案開啟時會報錯)  
  4. @SuppressWarnings("unused")  
  5. Sheet sheet1 = wb.createSheet();  
  6. @SuppressWarnings("unused")  
  7. Sheet sheet2 = wb.createSheet();  
  8. @SuppressWarnings
    ("unused")  
  9. Sheet sheet3 = wb.createSheet("new sheet");  
  10. @SuppressWarnings("unused")  
  11. Sheet sheet4 = wb.createSheet("rensanning");  
  12. //儲存為Excel檔案  
  13. FileOutputStream out = null;  
  14. try {  
  15.     out = new FileOutputStream("c:\\text.xls");  
  16.     wb.write(out);        
  17. catch (IOException e) {  
  18.     System.out.println(e.toString());  
  19. finally {  
  20.     try {  
  21.         out.close();  
  22.     } catch (IOException e) {  
  23.         System.out.println(e.toString());  
  24.     }  
  25. }     


2、生成Workbook OOXML形式(.xlsx) 
Java程式碼  收藏程式碼
  1. //生成Workbook  
  2. XSSFWorkbook wb = new XSSFWorkbook();  
  3. //......  


3、開啟Workbook 
Java程式碼  收藏程式碼
  1. //方法一:使用WorkbookFactory  
  2. FileInputStream in = null;  
  3. Workbook wb = null;  
  4. try {  
  5.     in = new FileInputStream(TEST_WORKBOOK_NAME);  
  6.     wb = WorkbookFactory.create(in);  
  7. catch (IOException e) {  
  8.     System.out.println(e.toString());  
  9. catch (InvalidFormatException e) {  
  10.     System.out.println(e.toString());  
  11. finally {  
  12.     try {  
  13.         in.close();  
  14.     } catch (IOException e) {  
  15.         System.out.println(e.toString());  
  16.     }  
  17. }  
  18. System.out.println("====================Workbook====================");  
  19. System.out.println("Number of Sheets:" + wb.getNumberOfSheets());  
  20. System.out.println("Sheet3's name:" + wb.getSheetName(3));  
  21. System.out.println();  
  22. //方法二:使用POIFSFileSystem  
  23. try {  
  24.     in = new FileInputStream(TEST_WORKBOOK_NAME);  
  25.     POIFSFileSystem fs = new POIFSFileSystem(in);  
  26.     wb = new HSSFWorkbook(fs);  
  27. catch (IOException e) {  
  28.     System.out.println(e.toString());  
  29. finally {  
  30.     try {  
  31.         in.close();  
  32.     } catch (IOException e) {  
  33.         System.out.println(e.toString());  
  34.     }  
  35. }  
  36. System.out.println("====================Workbook====================");  
  37. System.out.println("Number of Sheets:" + wb.getNumberOfSheets());  
  38. System.out.println("Sheet3's name:" + wb.getSheetName(3));  
  39. System.out.println();  


4、開啟加密的Workbook(讀加密) 
Java程式碼  收藏程式碼
  1. FileInputStream input = new FileInputStream(TEST_WORKBOOK_NAME_ENCRYPTED);  
  2. BufferedInputStream binput = new BufferedInputStream(input);  
  3. POIFSFileSystem poifs = new POIFSFileSystem(binput);  
  4. Biff8EncryptionKey.setCurrentUserPassword(TEST_WORKBOOK_PASSWORD);  
  5. HSSFWorkbook wb = new HSSFWorkbook(poifs);  
  6. System.out.println("====================EncryptedWorkbook====================");  
  7. System.out.println("Number of Sheets:" + wb.getNumberOfSheets());  
  8. System.out.println("Sheet0's name:" + wb.getSheetName(0));  
  9. System.out.println();  


5、追加Sheet 
Java程式碼  收藏程式碼
  1. Sheet sheet = wb.createSheet("append sheet");  


6、複製Sheet 
Java程式碼  收藏程式碼
  1. wb.cloneSheet(1);  


7、修改Sheet名稱 
Java程式碼  收藏程式碼
  1. wb.setSheetName(i, "SheetName new");  


8、刪除Sheet 
Java程式碼  收藏程式碼
  1. wb.removeSheetAt(1);  


9、設定下部Sheet名的Tab的第一個可見Tab 
Java程式碼  收藏程式碼
  1. //設定下部Sheet名的Tab的第一個可見Tab(以左的Sheet看不見)  
  2. wb.setFirstVisibleTab(2);  


10、調整Sheet順序 
Java程式碼  收藏程式碼
  1. wb.setSheetOrder("SheetName3"1);  
  2. wb.setSheetOrder(wb.getSheetName(4), 0);  


11、設定當前Sheet 
t.setActiveSheet(); 
Java程式碼  收藏程式碼
  1. //設定當前Sheet  
  2. wb.setActiveSheet(wb.getNumberOfSheets() - 1);  
  3. //(Excel的當前Sheet被設定,需要結合setSelected使用,不然下部Sheet名的Tab還是預設為第一個)  
  4. //(需要選擇多個Sheet的話,每個Sheet呼叫setSelected(true)即可)  
  5. wb.getSheetAt(wb.getNumberOfSheets() - 1).setSelected(true);  


12、固定視窗 
Java程式碼  收藏程式碼
  1. wb.getSheet("SheetName4").createFreezePane(22);  

 

13、分割視窗 
Java程式碼  收藏程式碼
  1. wb.getSheet("SheetName5").createSplitPane(2000200000, HSSFSheet.PANE_LOWER_LEFT);  

 

14、Sheet縮放 
Java程式碼  收藏程式碼
  1. //setZoom(int numerator, int denominator)  
  2. //"numerator"÷"denominator"  例如: 3÷1=3 那就是設定為300%  
  3. //擴大(200%)  
  4. wb.getSheet("sheetname1").setZoom(21);  
  5. //縮小(50%)  
  6. wb.getSheet("sheetname2").setZoom(12);  

 

15、行列分組 
Java程式碼  收藏程式碼
  1. wb.getSheet("sheetname3").groupColumn(47);  
  2. wb.getSheet("sheetname3").groupColumn(912);  
  3. wb.getSheet("sheetname3").groupColumn(1011);  
  4. wb.getSheet("sheetname3").groupRow(514);  
  5. wb.getSheet("sheetname3").groupRow(713);  
  6. wb.getSheet("sheetname3").groupRow(1619);  



16、關閉分組 
Java程式碼  收藏程式碼
  1. wb.getSheet("sheetname3").setColumnGroupCollapsed(10true);  
  2. wb.getSheet("sheetname3").setRowGroupCollapsed(7true);  


17、插入行 
Java程式碼  收藏程式碼
  1. Row row1 = wb.getSheet("sheetname4").createRow(1);  
  2. Cell cell1_1 = row1.createCell(1);  
  3. cell1_1.setCellValue(123);  
  4. Row row4 = wb.getSheet("sheetname4").createRow(4);  
  5. Cell cell4_3 = row4.createCell(3);  
  6. cell4_3.setCellValue("中國");  


18、刪除行 
Java程式碼  收藏程式碼
  1. Row row = wb.getSheet("sheetname4").getRow(1);  
  2. wb.getSheet("sheetname4").removeRow(row);  


19、移動行 
Java程式碼  收藏程式碼
  1. //******移動行只移動內容,不牽扯行的刪除和插入  
  2. //移動行(把第1行和第2行移到第5行之後)  
  3. wb.getSheet("sheetname5").shiftRows(015);  
  4. //移動行(把第3行和第4行往上移動1行)  
  5. wb.getSheet("sheetname5").shiftRows(23, -1);  


20、修改行高 
Java程式碼  收藏程式碼
  1. //設定預設行高