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常用的导入和导出功能,步骤已经写上备注了。