通过 POI 读取空白 xls 单元格



我正在尝试读取 xls 文件的空单元格并将它们作为空条目移植到我的对象 xls 中。但我并没有将这些单元格标识为空白。有人可以告诉我我做错了什么吗?

private boolean lerArquivo(String dir) throws IOException {
    HSSFWorkbook wb = null;
    HSSFRow row = null;
    HSSFCell cell = null;
    String path = dir;
    boolean flag = false;
    InputStream inp = new FileInputStream(path);
    wb = new HSSFWorkbook(inp);
    HSSFSheet sheet = wb.getSheetAt(0);
    for (Iterator rit = (Iterator) sheet.rowIterator(); rit.hasNext();) {
        row = (HSSFRow) rit.next();
        for (Iterator cit = (Iterator) row.cellIterator(); cit.hasNext();) {
            cell = (HSSFCell) cit.next();
            switch (cell.getCellType()) {
            case HSSFCell.CELL_TYPE_STRING:
                xls.add(cell.getRichStringCellValue().getString());
                break;
            case HSSFCell.CELL_TYPE_BLANK:
                xls.add(null);
                break;
            case HSSFCell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    xls.add(cell.getDateCellValue().toString());
                } else {
                    xls.add(String.valueOf(cell.getNumericCellValue()));
                }
                break;
            default:
            }
        }
    }

编辑 01 -你好加格拉瓦尔,谢谢你的帮助。我尝试了您的建议,并阅读了文档。按照我的理解,我更改了我的代码,达到这个:即使这样,代码也不会读取空白单元格。任何猜测?

for (int rowNum = 0; rowNum < 4; rowNum++) {
        row = sheet.getRow(rowNum);
        for (int celNum = 0; celNum < row.getLastCellNum(); celNum++) {
            cell = row.getCell(celNum, org.apache.poi.ss.usermodel.Row.RETURN_BLANK_AS_NULL);
            switch (cell.getCellType()) {
            case HSSFCell.CELL_TYPE_STRING:
                xls.add(cell.getRichStringCellValue().getString());
                break;
            case HSSFCell.CELL_TYPE_BLANK: {
                xls.add("");
                break;
            }
            case HSSFCell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    xls.add(cell.getDateCellValue().toString());
                } else {
                    xls.add(String.valueOf(cell.getNumericCellValue()));
                }
                break;
            default:
            }
        }
    }

Apache POI 有关于迭代行和单元格的非常详细和明确的文档,强烈建议您阅读它!

从那里复制并粘贴示例,您可以看到如何处理/检测缺失的行和单元格以及空白单元格:

// 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);
   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
      }
   }
}

最新更新