当前位置: 首页 > 知识库问答 >
问题:

如何使用POI库获取Excel文件中的行数?

西门安歌
2023-03-14

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

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

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

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

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

共有3个答案

权浩邈
2023-03-14

如果你检查一下

if
(getLastRowNum()<1){
 res="Sheet Cannot be empty";
return
}

这将确保至少有一行包含除标题以外的数据。下面是我的程序,效果很好。Excel文件有三列,即ID、名称和姓氏

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;
                          }
姚伟
2023-03-14

由于Sheet.get物理数字()不计算空行,并且Sheet.getLastRowNum()如果有一行或没有行,则返回0,因此我使用两种方法的组合来准确计算行数。

int rowTotal = sheet.getLastRowNum();

if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
    rowTotal++;
}

注意:这将把只有一个空行的电子表格视为没有空行,但在大多数情况下,这可能是可以的。

梁丘兴腾
2023-03-14

尝试Sheet.get物理数字()

 类似资料:
  • 伙计们,我正在使用POI 3.9库来处理excel文件。我知道函数,它在Excel文件中返回许多行。 唯一的问题是返回一个计数从0开始的数字。 因此,如果Excel文件使用前3行,返回2。如果Excel文件只有一行,返回0。 当Excel文件完全为空时,就会出现问题仍然返回0,因此我无法确定Excel文件是否有1行数据,或者是否为空。 那么,如何检测Excel文件是否为空?

  • 问题内容: 为了进行一些统计分析,我需要在Excel工作表的列中提取值。我一直在使用Apache POI包从Excel文件中读取数据,当需要迭代行时,它可以很好地工作。但是我找不到关于在API(链接文本)或通过Google搜索获取列的任何信息。 由于我需要获取不同列的最大值和最小值并使用这些值生成随机数,因此,无需选择单个列,唯一的选择是遍历行和列以获取值并一一比较。听起来不那么省时。 关于如何解

  • 问题内容: 如何使用Apache POI在Excel文件中获取列名,以确保按预期顺序排列列。 问题答案: 或这个: 行索引从0开始。

  • 下面的代码用于获取excel文件(.xlsx)的工作表名称 上面的代码存在的问题是,为一个9MB大小的文件创建需要占用大量内存(~700MB)&时间很长(5-6s)。即使将设置为也不会释放占用的内存(我知道可能被调用,也可能不被调用&JVM不会仅仅因为我将变量设置为null而释放内存) 我确实浏览了Workbook,XSSFWorkbook&根据我的理解,没有任何方法可以帮助我获得内存印记较低的工

  • 问题内容: 我有以下代码用于获取excel文件的工作表名称(.xlsx) 我上面的代码存在的问题是,为9MB大小的文件创建文件需要花费大量内存(〜700MB)和较长时间(5-6s)。即使将设置为,也不会释放占用的内存(我知道可能会叫,也可能不会叫&JVM不会因为我将变量设置为null而释放内存) 我确实浏览了Workbook,XSSFWorkbook的文档,据我了解,没有任何方法可以帮助我获得内存

  • 我需要做以下工作 1) 复制一个巨大的excel文件1400*1400并复制一份。 2)读取复制的文件并添加新的列和行,并同时进行编辑。 3) 这将是一个独立的程序,而不是在服务器上。我有低内存占用和快速性能的限制。 我做了一些阅读,发现以下内容 1)没有 API 可以复制一个巨大的文件 2)SXSSF可以用于写,但不能用于读 3)XSSF和SAX(事件API)可以用于读取,但不能用于editin