poi 读取 excel 总行数 ,总列数 注意事项 lastRowNum 、lastCellNum,起始 行号 lastRowNum 是 0 开始 ,lastCellNum 列号,是 1 开始

发布时间 2023-06-14 19:38:43作者: sunny123456

poi 读取 excel 总行数 ,总列数 注意事项 lastRowNum 、lastCellNum
https://blog.csdn.net/HaHa_Sir/article/details/127235280

        poi 读取 excel 总行数 ,总列数 注意事项 lastRowNum 、lastCellNum

一、概述

        1、如下图,有一个 4行 3列的excel 表格数据,用 poi 读取后,分别获取 最大行号 和 列号, 预期是的: 行数为4,列数为3 ; 而实际却是: 行数 和 列数都是 3 .

 

二、大概代码

        1、读取excel 文件代码

  1. public static void main(String[] args) throws IOException, InvalidFormatException {
  2. String path ="/excel模板-内容修改.xlsx";
  3. InputStream in = ExcelCellUpdateTest.load(path);
  4. Workbook workbook = WorkbookFactory.create(in);
  5. Sheet sheet = workbook.getSheetAt(0);
  6. for (Row row : sheet) {
  7. }
  8. int firstRowNum = sheet.getFirstRowNum();
  9. int lastRowNum = sheet.getLastRowNum();
  10. System.out.println("firstRowNum =" + firstRowNum + " \t lastRowNum="+lastRowNum);
  11. Row row0 = sheet.getRow(0);
  12. int rowNum = row0.getRowNum();
  13. System.out.println("rowNum = "+ rowNum);
  14. short lastCellNum = row0.getLastCellNum();
  15. short firstCellNum = row0.getFirstCellNum();
  16. int physicalNumberOfCells = row0.getPhysicalNumberOfCells();
  17. System.out.println("firstCellNum= "+firstCellNum + "\t lastCellNum = "+ lastCellNum + " \t physicalNumberOfCells="+physicalNumberOfCells);
  18. for (int i = 0; i <= lastRowNum; i++) {
  19. Row row = sheet.getRow(i);
  20. for (int j = 0; j < lastCellNum; j++) {
  21. Cell cell = row.getCell(j);
  22. String s = null ;
  23. if(Objects.nonNull(cell)){
  24. s = cell.toString();
  25. }
  26. System.out.print("cell num :"+ j + " cell val :"+ s +" \t");
  27. }
  28. System.out.println();
  29. }
  30. }

        1.1、输出结果:

  1. firstRowNum =0 lastRowNum=3
  2. rowNum = 0
  3. firstCellNum= 0 lastCellNum = 3 physicalNumberOfCells=3
  4. cell num :0 cell val :姓名 cell num :1 cell val :年龄 cell num :2 cell val :addr
  5. cell num :0 cell val :小明 cell num :1 cell val :18.0 cell num :2 cell val :北京市
  6. cell num :0 cell val :小红 cell num :1 cell val :22.0 cell num :2 cell val :中国
  7. cell num :0 cell val :小刚 cell num :1 cell val :33.0 cell num :2 cell val :朝阳区

三、总结

        1、poi 读取excel文件中, 起始 行号 和 列号,都是 0 开始 ( firstRowNum =0 / firstCellNum= 0); 总行号计数: 从 0 开始计数,总行数应该为: lastRowNum+1 ,实际显示的结果是:总行数-1 ,在循环读取行数的时候,应该注意

  1. for (int i = 0; i <= lastRowNum; i++) {
  2. // 应该是: <= 等于

        或者:

  1. for (int i = 0; i < lastRowNum+1 ; i++) {
  2. // 应该是: lastRowNum+1

        否则不能读取全部的行数!

        2、总列号计数:从1开始计数,总列数 = lastCellNum ; 和实际总列数是一致的,无需特别处理。 因 起始 行号 和 列号,都是 0 开始 ,所以读取列数的时候,常规读取即可,如下:

  1. for (int j = 0; j < lastCellNum; j++) {

更多是poi excel 相关知识:

1、 https://thinkcode.blog.csdn.net/article/details/105232822

2、https://thinkcode.blog.csdn.net/article/details/126602426