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

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

一、概述

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

 

二、大概代码

        1、读取excel 文件代码

public static void main(String[] args) throws IOException, InvalidFormatException {
    String path ="/excel模板-内容修改.xlsx";
    InputStream in = ExcelCellUpdateTest.load(path);
    Workbook workbook = WorkbookFactory.create(in);
    Sheet sheet = workbook.getSheetAt(0);
    for (Row row : sheet) {

    }
    int firstRowNum = sheet.getFirstRowNum();
    int lastRowNum = sheet.getLastRowNum();
    System.out.println("firstRowNum =" + firstRowNum + " \t lastRowNum="+lastRowNum);

    Row row0 = sheet.getRow(0);
    int rowNum = row0.getRowNum();
    System.out.println("rowNum = "+ rowNum);

    short lastCellNum = row0.getLastCellNum();
    short firstCellNum = row0.getFirstCellNum();
    int physicalNumberOfCells = row0.getPhysicalNumberOfCells();
    System.out.println("firstCellNum= "+firstCellNum + "\t lastCellNum = "+ lastCellNum +  " \t physicalNumberOfCells="+physicalNumberOfCells);

    for (int i = 0; i <= lastRowNum; i++) {
        Row row = sheet.getRow(i);
        for (int j = 0; j < lastCellNum; j++) {
            Cell cell = row.getCell(j);
            String s = null ;
            if(Objects.nonNull(cell)){
                s = cell.toString();
            }
            System.out.print("cell num :"+ j + " cell val :"+ s +" \t");
        }
        System.out.println();
    }
}

        1.1、输出结果:

firstRowNum =0 	 lastRowNum=3
rowNum = 0
firstCellNum= 0	 lastCellNum = 3 	 physicalNumberOfCells=3
cell num :0 cell val :姓名 	cell num :1 cell val :年龄 	cell num :2 cell val :addr 	
cell num :0 cell val :小明 	cell num :1 cell val :18.0 	cell num :2 cell val :北京市 	
cell num :0 cell val :小红 	cell num :1 cell val :22.0 	cell num :2 cell val :中国 	
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 ,在循环读取行数的时候,应该注意

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

        或者:

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

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

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

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

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值