Maven依赖

地址

https://mvnrepository.com/artifact/org.apache.poi/poi
https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml

说明

  • poi:读取Excel 2003及以下版本的文件,也就是后缀为.xls的文件

    1. Workbook workbook = new HSSFWorkbook();
  • poi-ooxml:读取Excel 2007及以上的文件,也就是后缀为.xlsx的文件

    1. Workbook workbook =new XSSFWorkbook();

获取Workbook对象

方式一:通过文件流的方式

  1. public static Workbook getWorkbook(String filePath) {
  2. InputStream inputStream = null;
  3. try {
  4. inputStream = new FileInputStream(filePath);
  5. //获取文件库扩展名,使用依赖库:https://mvnrepository.com/artifact/commons-io/commons-io
  6. String extension = FilenameUtils.getExtension(filePath);
  7. Workbook workbook = null;
  8. if (extension.equals("xls")) {//2003-
  9. workbook = new HSSFWorkbook(inputStream);
  10. } else if (extension.equals("xlsx")) {//2007+
  11. workbook = new XSSFWorkbook(inputStream);
  12. }
  13. return workbook;
  14. } catch (FileNotFoundException e) {
  15. e.printStackTrace();
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }finally {
  19. if(inputStream!=null){
  20. try {
  21. inputStream.close();
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }
  27. return null;
  28. }

Sheet相关

前提,定义可用的Workbook:Workbook workbook

当前Excel文件Sheet页的个数

  1. int numberOfSheets = workbook.getNumberOfSheets();

通过索引获取Sheet对象

  • 索引从0开始
  • 参数为无效的索引会发生异常:Exception in thread "main" java.lang.IllegalArgumentException: Sheet index (4) is out of range (0..2)
    1. Sheet sheet = workbook.getSheetAt(0);

通过Sheet名称获取Sheet对象

  • 参数名称不区分大小写
  • 输入无效的不存在的名称参数,返回null
    1. Sheet sheet = workbook.getSheet("sheet1");

根据索引直接获取Sheet的名称

  • 索引从0开始
  • 无效的索引会发生异常:Exception in thread "main" java.lang.IllegalArgumentException: Sheet index (4) is out of range (0..2)
    1. String sheetName = workbook.getSheetName(1);

获取当前默认激活的Sheet页索引

  • 索引从0开始
    1. int activeSheetIndex = workbook.getActiveSheetIndex();

根据Sheet名称,获取Sheet索引

  • 索引从0开始
  • 名称不区分大小写
    1. int sheet = workbook.getSheetIndex("sheet2");

获取最后一行

  • 之前有内容的单元格后被重置为空,在计算时可能被计算为行,所以在实际返回值可能高于预期
    1. int lastRowNum = sheet.getLastRowNum();

Cell相关