Java Apache poi HSSF返回的物理行数不正确
我正在处理用户给定的Excel文件(.xls),并使用Apache poi HSSF读取工作表。Excel实际包含16行Java Apache poi HSSF返回的物理行数不正确,java,excel,apache-poi,Java,Excel,Apache Poi,我正在处理用户给定的Excel文件(.xls),并使用Apache poi HSSF读取工作表。Excel实际包含16行 第13排是空的 第14行有数据 第15排是空的 第16行有数据 在本例中,工作表.getPhysicalRows()返回13。 而,worksheet.getLastRowNum()返回16 请注意,如果我删除了第13行,getPhysicalRows()将返回14。 如果我还删除了第16行,getPhysicalRows()仍然返回14 根本不读取包含有效数据的最后一行
- 第13排是空的李>
- 第14行有数据
- 第15排是空的
- 第16行有数据
工作表.getPhysicalRows()返回13。
而,worksheet.getLastRowNum()
返回16
请注意,如果我删除了第13行,getPhysicalRows()
将返回14。
如果我还删除了第16行,getPhysicalRows()
仍然返回14
根本不读取包含有效数据的最后一行
您在XLS中遇到过这种行为吗
编辑:我不确定这个代码是否能帮助解决这个问题
excelDocumentStream = new FileInputStream(new File(xlFilePath));
POIFSFileSystem fsPOI = new POIFSFileSystem(new BufferedInputStream(excelDocumentStream));
workbook = new HSSFWorkbook(fsPOI);
int numOfRows = workSheet.getPhysicalNumberOfRows();
int lastRow = workSheet.getLastRowNum();
像这样做
int rows = 0;
if(sheet.getPhysicalNumberOfRows()>0)
rows=sheet.getLastRowNum() - sheet.getFirstRowNum()+1;
希望这有帮助 向代码显示如何读取数据。我敢用美元赌甜甜圈,这不是POI有漏洞。您还说“Excel实际包含16行”,这是错误的。空行不是物理行。如果“空行不是物理行”,POI应该返回14作为忽略两个物理行的结果。Apache POI只是告诉您Excel已写入文件的内容。您的问题听起来更像是“为什么Microsoft Office有时会将意外值写入Excel文件”…那么getPhysicalNumberOfRows()
只返回内部树映射的大小。如果您声称它返回的数据少于它应该返回的数据,那么该工作表已被解析错误。检查调试器发生了什么,如果它确实是一个bug,请将Excel发送给POI人员。@Gee如果您的文件是新创建的,并且您只写入了第1、2和10行,那么有3个物理行,但最后一行是10,因此计数不同是完全正常的!