Java TreeMap缺少对象行中的键

Java TreeMap缺少对象行中的键,java,apache-poi,Java,Apache Poi,我正在使用ApachePOI库将Excel工作表中的值读取到Java程序中 我遍历表中的每一行以获得所需的值 在对象行中,有一个树映射,其中包含XSSFCell对象作为值 通常我会得到以下树形图: 其中包括键4。该值通常是在此图片中选择的空字符串 出于某种原因,对于某些对象,我得到以下树状图: 缺少键4 两个行对象属于同一个表 以下是我使用对象行的方式: XSSFSheet mySheet = myWorkBook.getSheet("nameOfSheet"); Iterator<

我正在使用ApachePOI库将Excel工作表中的值读取到Java程序中

我遍历表中的每一行以获得所需的值

在对象行中,有一个树映射,其中包含XSSFCell对象作为值

通常我会得到以下树形图:

其中包括键4。该值通常是在此图片中选择的空字符串

出于某种原因,对于某些对象,我得到以下树状图:

缺少键4

两个行对象属于同一个表

以下是我使用对象行的方式:

 XSSFSheet mySheet = myWorkBook.getSheet("nameOfSheet");
 Iterator<Row> rowIterator = mySheet.iterator();

 while (rowIterator.hasNext()) {
        Row row = rowIterator.next();
        // here I call my method
    }
XSSFSheet mySheet=myWorkBook.getSheet(“工作表名称”);
迭代器rowIterator=mySheet.Iterator();
while(roweiterator.hasNext()){
行=行迭代器。下一步();
//这里我称之为我的方法
}

您可以通过调用“getCell()”同时传递索引和行(可能是行)来防止这种情况在应用程序中造成不一致性。将\u BLANK\u返回为\u NULL

报告解释说:

在某些情况下,在迭代时,您需要完全控制丢失的方式 或者处理空白行和单元格,您需要确保访问 每个单元格,而不仅仅是文件中定义的单元格。(细胞迭代器) 将只返回文件中定义的单元格,这些单元格主要是 具有值或样式,但取决于Excel)

在这种情况下,您应该获取第一列和最后一列 信息,然后调用getCell(int,MissingCellPolicy)以 去拿手机。使用MissingCellPolicy控制空白或空值的大小 细胞被处理

//决定要处理的行
int rowStart=Math.min(15,sheet.getFirstRowNum());
int rowEnd=Math.max(1400,sheet.getLastRowNum());
对于(int-rowNum=rowStart;rowNum
Excel
文件中,并非所有可能的单元格和行都始终存储。否则,每个
*.xlsx
Excel
文件必须存储所有1048576行,其中包含16384个单元格。不存储没有内容或格式的单元格。对于那些未存储的单元格,迭代器将不会有,内部
\u单元格
映射也不会包含。看,你的解释听起来很合理。但我不明白,为什么对于处于相同状态(格式和内容)但位于不同行的某些单元格,行对象的反应不同。我想我将使用try/catch来避免这个错误。
// Decide which rows to process
int rowStart = Math.min(15, sheet.getFirstRowNum());
int rowEnd = Math.max(1400, sheet.getLastRowNum());

for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
   Row r = sheet.getRow(rowNum);
   if (r == null) {
      // This whole row is empty
      // Handle it as needed
      continue;
   }

   int lastColumn = Math.max(r.getLastCellNum(), MY_MINIMUM_COLUMN_COUNT);

   for (int cn = 0; cn < lastColumn; cn++) {
      Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
      if (c == null) {
         // The spreadsheet is empty in this cell
      } else {
         // Do something useful with the cell's contents
      }
   }
}