Java讀寫Excel之POI超入門
阿新 • • 發佈:2019-01-07
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程式碼
- //生成Workbook
- HSSFWorkbook wb = new HSSFWorkbook();
- //新增Worksheet(不新增sheet時生成的xls檔案開啟時會報錯)
- @SuppressWarnings("unused")
- Sheet sheet1 = wb.createSheet();
- @SuppressWarnings("unused")
- Sheet sheet2 = wb.createSheet();
-
@SuppressWarnings
- Sheet sheet3 = wb.createSheet("new sheet");
- @SuppressWarnings("unused")
- Sheet sheet4 = wb.createSheet("rensanning");
- //儲存為Excel檔案
- FileOutputStream out = null;
- try {
- out = new FileOutputStream("c:\\text.xls");
- wb.write(out);
- } catch (IOException e) {
- System.out.println(e.toString());
- } finally {
- try {
- out.close();
- } catch (IOException e) {
- System.out.println(e.toString());
- }
- }
2、生成Workbook OOXML形式(.xlsx)
Java程式碼
- //生成Workbook
- XSSFWorkbook wb = new XSSFWorkbook();
- //......
3、開啟Workbook
Java程式碼
- //方法一:使用WorkbookFactory
- FileInputStream in = null;
- Workbook wb = null;
- try {
- in = new FileInputStream(TEST_WORKBOOK_NAME);
- wb = WorkbookFactory.create(in);
- } catch (IOException e) {
- System.out.println(e.toString());
- } catch (InvalidFormatException e) {
- System.out.println(e.toString());
- } finally {
- try {
- in.close();
- } catch (IOException e) {
- System.out.println(e.toString());
- }
- }
- System.out.println("====================Workbook====================");
- System.out.println("Number of Sheets:" + wb.getNumberOfSheets());
- System.out.println("Sheet3's name:" + wb.getSheetName(3));
- System.out.println();
- //方法二:使用POIFSFileSystem
- try {
- in = new FileInputStream(TEST_WORKBOOK_NAME);
- POIFSFileSystem fs = new POIFSFileSystem(in);
- wb = new HSSFWorkbook(fs);
- } catch (IOException e) {
- System.out.println(e.toString());
- } finally {
- try {
- in.close();
- } catch (IOException e) {
- System.out.println(e.toString());
- }
- }
- System.out.println("====================Workbook====================");
- System.out.println("Number of Sheets:" + wb.getNumberOfSheets());
- System.out.println("Sheet3's name:" + wb.getSheetName(3));
- System.out.println();
4、開啟加密的Workbook(讀加密)
Java程式碼
- FileInputStream input = new FileInputStream(TEST_WORKBOOK_NAME_ENCRYPTED);
- BufferedInputStream binput = new BufferedInputStream(input);
- POIFSFileSystem poifs = new POIFSFileSystem(binput);
- Biff8EncryptionKey.setCurrentUserPassword(TEST_WORKBOOK_PASSWORD);
- HSSFWorkbook wb = new HSSFWorkbook(poifs);
- System.out.println("====================EncryptedWorkbook====================");
- System.out.println("Number of Sheets:" + wb.getNumberOfSheets());
- System.out.println("Sheet0's name:" + wb.getSheetName(0));
- System.out.println();
5、追加Sheet
Java程式碼
- Sheet sheet = wb.createSheet("append sheet");
6、複製Sheet
Java程式碼
- wb.cloneSheet(1);
7、修改Sheet名稱
Java程式碼
- wb.setSheetName(i, "SheetName new");
8、刪除Sheet
Java程式碼
- wb.removeSheetAt(1);
9、設定下部Sheet名的Tab的第一個可見Tab
Java程式碼
- //設定下部Sheet名的Tab的第一個可見Tab(以左的Sheet看不見)
- wb.setFirstVisibleTab(2);
10、調整Sheet順序
Java程式碼
- wb.setSheetOrder("SheetName3", 1);
- wb.setSheetOrder(wb.getSheetName(4), 0);
11、設定當前Sheet
t.setActiveSheet();
Java程式碼
- //設定當前Sheet
- wb.setActiveSheet(wb.getNumberOfSheets() - 1);
- //(Excel的當前Sheet被設定,需要結合setSelected使用,不然下部Sheet名的Tab還是預設為第一個)
- //(需要選擇多個Sheet的話,每個Sheet呼叫setSelected(true)即可)
- wb.getSheetAt(wb.getNumberOfSheets() - 1).setSelected(true);
12、固定視窗
Java程式碼
- wb.getSheet("SheetName4").createFreezePane(2, 2);
13、分割視窗
Java程式碼
- wb.getSheet("SheetName5").createSplitPane(2000, 2000, 0, 0, HSSFSheet.PANE_LOWER_LEFT);
14、Sheet縮放
Java程式碼
- //setZoom(int numerator, int denominator)
- //"numerator"÷"denominator" 例如: 3÷1=3 那就是設定為300%
- //擴大(200%)
- wb.getSheet("sheetname1").setZoom(2, 1);
- //縮小(50%)
- wb.getSheet("sheetname2").setZoom(1, 2);
15、行列分組
Java程式碼
- wb.getSheet("sheetname3").groupColumn(4, 7);
- wb.getSheet("sheetname3").groupColumn(9, 12);
- wb.getSheet("sheetname3").groupColumn(10, 11);
- wb.getSheet("sheetname3").groupRow(5, 14);
- wb.getSheet("sheetname3").groupRow(7, 13);
- wb.getSheet("sheetname3").groupRow(16, 19);
16、關閉分組
Java程式碼
- wb.getSheet("sheetname3").setColumnGroupCollapsed(10, true);
- wb.getSheet("sheetname3").setRowGroupCollapsed(7, true);
17、插入行
Java程式碼
- Row row1 = wb.getSheet("sheetname4").createRow(1);
- Cell cell1_1 = row1.createCell(1);
- cell1_1.setCellValue(123);
- Row row4 = wb.getSheet("sheetname4").createRow(4);
- Cell cell4_3 = row4.createCell(3);
- cell4_3.setCellValue("中國");
18、刪除行
Java程式碼
- Row row = wb.getSheet("sheetname4").getRow(1);
- wb.getSheet("sheetname4").removeRow(row);
19、移動行
Java程式碼
- //******移動行只移動內容,不牽扯行的刪除和插入
- //移動行(把第1行和第2行移到第5行之後)
- wb.getSheet("sheetname5").shiftRows(0, 1, 5);
- //移動行(把第3行和第4行往上移動1行)
- wb.getSheet("sheetname5").shiftRows(2, 3, -1);
20、修改行高
Java程式碼
- //設定預設行高