如何使用Apache POIsearch​​特定date的Excel工作表?

我一直使用给出的示例代码来search工作表的内容:

Sheet sheet1 = wb.getSheetAt(0); for (Row row : sheet1) { for (Cell cell : row) { CellReference cellRef = new CellReference(row.getRowNum(), cell.getCellNum()); System.out.print(cellRef.formatAsString()); System.out.print(" - "); switch(cell.getCellType()) { case Cell.CELL_TYPE_STRING: System.out.println(cell.getRichStringCellValue().getString()); break; case Cell.CELL_TYPE_NUMERIC: if(DateUtil.isCellDateFormatted(cell)) { System.out.println(cell.getDateCellValue()); } else { System.out.println(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: System.out.println(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_FORMULA: System.out.println(cell.getCellFormula()); break; default: System.out.println(); } } 

}

但无法find正确比较从工作表中提取的date与给定date的方法。 我试过使用数据validation,也格式化date到一个string,并包括进一步的条件声明,但没有任何工作。

看起来像一个相对简单的问题,必要但尚未能够解决它呢?

任何帮助将不胜感激!

Excel将date存储为浮点小数,这显然与Java处理date( long值)的方式不同。

Apache POI包含一个辅助类,用于在Java和Excel之间进行date转换: DateUtil 。 这应该有帮助(如果我的问题是正确的)。

我注意到,如果你从表单中读取一个数字,即使你把它看作一个string,你也会得到十进制的数字。

我所做的,我保留单元格中的所有数据以下划线'_'开始,所以如果我尝试从任何单元格读取数据作为string,我不会得到小数或任何东西。

 String cellValue = cell.getValueAsString(); // assuming the cell value is "_01/01/2011" cellValue = cellValue.substring(1);// this will ignore first character, the '_' 

使用DataFormatter类(Apache POI):

  DataFormatter df = new DataFormatter(); String cellValue = df.formatCellValue(Cell cell);