Manve依賴
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.5-FINAL</version> </dependency>
1. Apache POI 中常用的類
HSSF - 提供讀寫Microsoft Excel XLS格式檔案的功能。
XSSF - 提供讀寫Microsoft Excel OOXML XLSX格式檔案的功能。
HWPF - 提供讀寫Microsoft Word DOC97格式檔案的功能。
XWPF - 提供讀寫Microsoft Word DOC2003格式檔案的功能。
HSLF - 提供讀寫Microsoft PowerPoint格式檔案的功能。
HDGF - 提供讀Microsoft Visio格式檔案的功能。
HPBF - 提供讀Microsoft Publisher格式檔案的功能。
HSMF - 提供讀Microsoft Outlook格式檔案的功能。
2.Excel中的工作簿、工作表、行、單元格中的關系:
一個Excel文件對應於一個workbook(HSSFWorkbook),
一個workbook可以有多個sheet(HSSFSheet)組成,
一個sheet是由多個row(HSSFRow)組成,
一個row是由多個cell(HSSFCell)組成
3.演示2003和2007版Excel解析(導出)
//獲取文件流 InputStream inputStream = new FileInputStream("C:\\Users\\50360\\Desktop\\hahahhahahh.xlsx"); //創建07版的Workbook 文件格式是xls是03版的 應該使用new HSSFWorkbook Workbook workbook = new XSSFWorkbook(inputStream); //獲取第一個Sheet1 Sheet sheet = workbook.getSheetAt(0); //獲取一個POI的時間日期格式化器 DataFormatter formatter = new DataFormatter(); //循環遍歷Sheet1的每一行 for (Row row : sheet) { //遍歷Sheet1每一行的每個單元格 for (Cell cell : row) { CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex()); //獲取這個單元格的坐名稱 $A$1 System.out.print(cellRef.formatAsString()); System.out.print(" - "); //通過獲取單元格值並應用任何數據格式(Date,0.00,1.23e9,$ 1.23等),獲取單元格中顯示的文本 String text = formatter.formatCellValue(cell); System.out.println(text); //獲取值並自己格式化 switch (cell.getCellType()) { // 字符串型 case Cell.CELL_TYPE_STRING: System.out.println(cell.getRichStringCellValue().getString()); break; // 數值型 case Cell.CELL_TYPE_NUMERIC: // 如果是date類型則 ,獲取該cell的date值 if (DateUtil.isCellDateFormatted(cell)) { System.out.println(cell.getDateCellValue()); } else {// 純數字 System.out.println(cell.getNumericCellValue()); } break; // 布爾 case Cell.CELL_TYPE_BOOLEAN: System.out.println(cell.getBooleanCellValue()); break; // 公式型 case Cell.CELL_TYPE_FORMULA: System.out.println(cell.getCellFormula()); break; // 空值 case Cell.CELL_TYPE_BLANK: System.out.println(); break; // 故障 case Cell.CELL_TYPE_ERROR: System.out.println(); break; default: System.out.println(); } } } }
4.Excel2003和2007的新建(導入)
//新建(導入)Excel方法,isXlsx標記為07版 public Workbook export(boolean isXlsx) { //創建一個Excel Workbook workbook; //根據要求創建03或者07版本 if(isXlsx) { workbook = new XSSFWorkbook(); } else { workbook = new HSSFWorkbook(); } //創建一個Sheet Sheet sheet = workbook.createSheet("My Sheet"); //獲取模擬數據 List<List<String>> content = this.getContent(); //循環遍歷將數據填充到Excel中 for(int i = 0; i < content.size(); i++) { Row row = sheet.createRow(i); List<String> rowData = content.get(i); for(int j = 0; j < rowData.size(); j++) { row.createCell(j).setCellValue(rowData.get(j)); } } return workbook; } //模擬導入的Excel中的數據 private List<List<String>> getContent() { List<List<String>> result = new ArrayList<>(); List<String> row = new ArrayList<>(); result.add(row); row.add("序號"); row.add("姓名"); row.add("年齡"); row.add("時間"); row = new ArrayList<>(); result.add(row); row.add("1"); row.add("路人甲"); row.add("18"); row.add("2010-01-01"); row = new ArrayList<>(); result.add(row); row.add("2"); row.add("路人乙"); row.add("19"); row.add("2010-01-02"); row = new ArrayList<>(); result.add(row); row.add("3"); row.add("路人丙"); row.add("20"); row.add("2010-01-03"); return result; }
最后:Apache POI可以操作很多文檔,比如word等,當然這里僅僅介紹了Excel常用的導入和導出功能,步驟已經寫上備注了。
