伙计们,我目前正在使用POI 3.9库来处理excel文件。 我知道getLastRowNum()函数,该函数在Excel文件中返回许多行。

唯一的问题是getLastRowNum()返回一个从0开始计数的数字。

因此,如果Excel文件使用前3行,则getLastRowNum()返回2。

如果Excel文件只有1行,则getLastRowNum()返回0。

Excel文件完全为空时,会发生此问题。 getLastRowNum()仍返回0,因此我无法确定Excel文件是否具有1行数据,或者它是否为空。

那么,如何检测Excel文件是否为空?

尝试Sheet.getPhysicalNumberOfRows()

+1马西娅斯。只是,如果仅通过按Delete键删除单元格,则看来行实际上仍然存在,并且返回了旧计数。

好吧,我认为,如果您想对实际上具有一些非空值的行进行计数,则需要自己对其进行迭代。我不确定,但是我知道此方法会返回曾经被"声明过"的行数。

警告:如果工作表中有空白行,则getPhysicalNumberOfRows不将它们包括在返回的计数中。但是,getLastRowNum也完全按照其提示进行操作。因此,要遍历所有行,您需要使用getLastRowNum + 1作为迭代循环的上限-小心处理可能不存在的行。

由于Sheet.getPhysicalNumberOfRows()不会计算空行,并且Sheet.getLastRowNum()在只有一行或没有行的情况下都返回0,因此我结合使用这两种方法来准确地计算总行数。

int rowTotal = sheet.getLastRowNum();

if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {

rowTotal++;

}

注意:这会将具有一个空行的电子表格视为没有任何电子表格,但对于大多数目的而言,这可能是可以的。

您可以做两件事

采用

int noOfColumns = sh.getRow(0).getPhysicalNumberOfCells();

要么

int noOfColumns = sh.getRow(0).getLastCellNum();

他们之间有很好的区别

选项1给出实际填充内容的列数(如果10列的第二列未填充,您将得到9)

选项2仅给您最后一列的索引。因此完成了'getLastCellNum()'

如果您检查

if

(getLastRowNum()<1){

res="Sheet Cannot be empty";

return

}

这将确保您至少有一行包含标题以外的数据。下面是我的程序,可以正常工作。 Excel文件具有三列,即。 ID,NAME,LASTNAME

XSSFWorkbook workbook = new XSSFWorkbook(inputstream);

XSSFSheet sheet = workbook.getSheetAt(0);

Row header = sheet.getRow(0);

int n = header.getLastCellNum();

String header1 = header.getCell(0).getStringCellValue();

String header2 = header.getCell(1).getStringCellValue();

String header3 = header.getCell(2).getStringCellValue();

if (header1.equals("ID") && header2.equals("NAME")

&& header3.equals("LASTNAME")) {

if(sheet.getLastRowNum()<1){

System.out.println("Sheet empty");

return;

}

iterate over sheet to get cell values

}else{

SOP("invalid format");

return;

}

该文档指出,它从零开始。因此,对于getLastRowNum(),如果没有列或只有1个(在您的情况下为标头),则将返回0。因此,用于检查是否有任何行getPhysicalNumberOfRows()也应使用。

HSSF工作表文档还包含有关此主题的更多内容。

要查找最后一个数据行,以防您在excel中创建了表格模板,该模板部分填充或行之间为空。

逻辑:

int count = 0;

int emptyrow=0;

int irow=0;

while (rowIterator.hasNext()) {

row = (Row) rowIterator.next();

if (count != 0 && !checkIfRowIsEmpty(row)) { }

else{

if(count!=0 && emptyrow==irow){

emptyrow++;

}else{

emptyrow=0;

irow=0;

}

}

if(emptyrow>0){

irow++;

}

if(emptyrow>3){

break;

}

count++;

}

java 获取excel的行数_关于Java:如何使用POI库获取Excel文件中的行数?相关推荐

  1. java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?

    本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...

  2. Java黑皮书课后题第8章:*8.26(行排序)用下面的方法实现一个二维数组中的行排序。返回新数组,且原数组保持不变。编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵

    *8.26(行排序)用下面的方法实现一个二维数组中的行排序.返回新数组,且原数组保持不变.编写一个测试程序,提示用户输入一个3*3的double型矩阵,显示一个排好的矩阵 题目 题目描述与运行示例 破 ...

  3. linux 取文件字节数,如何在Linux上的C中获取文件中的字符数(而不是字节数)

    我想获取文件中的字符数.字符我的意思是"真正的"字符,而不是字节.假设我知道文件编码. 我尝试使用mbstowcs()但它不起作用,因为它使用系统区域设置(或使用setlocale ...

  4. sed删除以什么开头的内容_使用 sed 命令删除文件中的行

    原标题:使用 sed 命令删除文件中的行 Sed 代表流编辑器 Stream Editor ,常用于 Linux 中基本的文本处理.sed 命令是 Linux 中的重要命令之一,在文件处理方面有着重要 ...

  5. 对文件中的行,单词和字符进行迭代

    编写不同的文本处理和文件操作脚本时,通常需要对文件中的行,单词和字符进行迭代,尽管这个问题看起来很简单,但是实现起来却常常出现问题,下面,就让我们来看看怎样实现上述功能. 为了实现上述的功能,我们需要 ...

  6. 【C++】读取txt文件中指定行的内容

    使用c++读取TXT文件中指定行的内容 classification_classes_ILSVRC2012.txt:下载链接 验证: #include <iostream> #includ ...

  7. linux中sed -i命令修改文件内容、在文件中插入行、删除文件中删除行

    文章目录 0.sed -i与sed 1.修改文件内容 2.在文件中插入行 3.在文件中删除行 4.使用find查找文件,并用 | xargs传输文件名给sed命令 0.sed -i与sed sed - ...

  8. Tools下的mdscongiguer 文件中 43行 oracle 配置 发现需要连接库 -lclntsh libclntsh.so 库是个什么东西呢?...

    Tools下的mdscongiguer     文件中 43行  oracle 配置      发现需要连接库 -lclntsh      libclntsh.so 库是个什么东西呢? 分想一个知乎网 ...

  9. python之从文件中按行读取数据

    #!/usr/bin/env python3 # -*- coding: utf-8 -*-__author__ = 'jiangwenwen'# 从文件中按行读取数据 file = open(&qu ...

  10. Idea 中出现:运行 Test 时出错。命令行过长。 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。

    Idea 中出现:运行 Test 时出错.命令行过长. 通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行. 在项目的 .idea 目录下的 workspace.xml 中的 <comp ...

最新文章

  1. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)
  2. 华人一作登ICCV 2021,实时超分新SOTA!AutoML显神威:1%参数量,超清视频70倍加速...
  3. python爬虫程序说明_Python即时网络爬虫:API说明
  4. (一)硕博生常用的中文文献检索方式推荐
  5. Glide @GlideModule 注解使用
  6. AWS 基础服务学习
  7. 如何在 IntelliJ IDEA 中快速生成 JavaDoc 注释模板
  8. LeetCode—210. 课程表 II
  9. Exynos4412裸机开发 —— RTC 实时时钟单元
  10. Mac系统安装Windows系统
  11. 计算机二级是要报所有科目吗,我要报考计算机等级考试二级,是全部科目都要考吗?...
  12. xlsx文件打开乱码_Excel打开出现乱码的解法方法
  13. elasticsearch实践之代码结构设计
  14. 什么杀毒软件最好|什么杀毒软件好用
  15. 五种“网络钓鱼”实例解析及防范技巧(转)
  16. Android APK瘦身之Android Studio Lint (代码审查)
  17. 1.什么情况下发生GC
  18. python学习笔记---函数【廖雪峰】
  19. 海信电视power android,海信智能电视投屏之安卓手机miracast投屏教程
  20. 智能座舱,一场正在发生的交互革命

热门文章

  1. RS-485总线,这篇很详细
  2. 联通笔试真题(有答案)
  3. Python2.爬虫--单词查询程序
  4. julia集 matlab代码,Julia集分形
  5. 美学心得(第一百七十九集) 罗国正
  6. mysql从指定条数开始查询_mysql数据库指定条数数据查询的主要方法
  7. yum: command not found
  8. 初学MSP430SPI通信
  9. 【基础】SAP 新增计量单位
  10. “小步快跑、快速迭代” 可用于工作的好方法