Java用POI读取Excel文件
1. Maven引入POI依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
若只引入poi,则无XSSFWorkbook和SXSSHWorkbook,还需引入poi-ooxml。HSSFworkbook,XSSFworkbook,SXSSFworkbook区别总结
2. 获取文件对象(导包过程交给IDEA)
将文件通过XSSFWorkbook/HSSFWorkbook将文件的IO流转换成WorkBook对象。Excel的Excel文件后缀用响应的类型。.xlsx->XSSFWorkbook,.xls->HSSFWorkbook
private Workbook getReadWorkBookType(String filePath) {
//xls-2003, xlsx-2007
FileInputStream is = null;
try {
is = new FileInputStream(filePath);
if (filePath.toLowerCase().endsWith("xlsx")) {
return new XSSFWorkbook(is);
} else if (filePath.toLowerCase().endsWith("xls")) {
return new HSSFWorkbook(is);
} else {
throw new RuntimeException("excel格式文件错误");
}
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
} finally {
IOUtils.closeQuietly(is);
}
}
3. 利用步骤2获取到的WorkBook获取Excel文件中的页签(sheet)
用getSheetAt(int index)方法(var为页签序号,从0开始),或getSheetAt(String sheetName)方法(sheetName为页签名)
private Sheet getThisFileSheet(Workbook workbook){
return workbook.getSheetAt(0);
}
4. 获取单元格
利用Sheet的方法,获取行Row,再由Row的方法获取Cell(单元格),再根据单元格的类型,获取具体值。
////第0行是表名,忽略,从第二行开始读取
for (int rowNum = 1; rowNum <= sheet.getLastRowNum(); rowNum++) {
Row row = sheet.getRow(rowNum);
Cell cell = row.getCell(0);
getCellStringVal(cell).trim();//getCellStringVal方法见下文
}
private String getCellStringVal(Cell cell) {
CellType cellType = (cell == null) ? CellType.BLANK : cell.getCellTypeEnum();
switch (cellType) {
case NUMERIC:
return cell.getStringCellValue();
case STRING:
return cell.getStringCellValue();
case BOOLEAN:
return String.valueOf(cell.getBooleanCellValue());
case FORMULA:
return cell.getCellFormula();
case BLANK:
return null;
case ERROR:
return String.valueOf(cell.getErrorCellValue());
default:
return null;
}
}






网友评论