伙计们,我正在使用POI 3.9库来处理excel文件。我知道getLastRowNum()
函数,它在Excel文件中返回许多行。
唯一的问题是getLastRowNum()
返回一个计数从0开始的数字。
因此,如果Excel文件使用前3行,getLastRowNum()
返回2。如果Excel文件只有一行,getLastRowNum()
返回0。
当Excel文件完全为空时,就会出现问题getLastRowNum()
仍然返回0,因此我无法确定Excel文件是否有1行数据,或者是否为空。
那么,如何检测Excel文件是否为空?
如果你检查一下
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;
}
由于Sheet.get物理数字()
不计算空行,并且Sheet.getLastRowNum()
如果有一行或没有行,则返回0,因此我使用两种方法的组合来准确计算行数。
int rowTotal = sheet.getLastRowNum();
if ((rowTotal > 0) || (sheet.getPhysicalNumberOfRows() > 0)) {
rowTotal++;
}
注意:这将把只有一个空行的电子表格视为没有空行,但在大多数情况下,这可能是可以的。
尝试Sheet.get物理数字()
问题内容: 伙计们,我目前正在使用POI 3.9库来处理excel文件。我知道该函数,该函数在Excel文件中返回许多行。 唯一的问题是返回一个从0开始的数字。 因此,如果Excel文件使用前3行,则返回2。如果Excel文件只有1行,则返回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