5

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

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

}

但是找不到一种方法来正确比较从工作表中提取的日期与给定日期。我尝试过使用数据验证并将日期格式化为字符串并包括进一步的条件语句,但没有任何效果。

似乎是一个相对简单的问题,有必要但还没有解决它?

任何帮助将不胜感激!

4

3 回答 3

3

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

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

于 2011-01-04T07:40:35.760 回答
0

我注意到,如果您从工作表中读取一个数字,即使您将其作为字符串读取,您也会得到十进制的数字。

我所做的是,我将单元格中的所有数据都以下划线“_”开头,所以如果我尝试从任何单元格中读取数据作为字符串,我不会得到小数或任何东西。

String cellValue = cell.getValueAsString(); // assuming the cell value is "_01/01/2011"
cellValue = cellValue.substring(1);// this will ignore first character, the '_'
于 2011-01-04T07:53:57.903 回答
0

使用DataFormatter类(Apache POI):

 DataFormatter df = new DataFormatter();
 String cellValue = df.formatCellValue(Cell cell);
于 2013-12-17T08:31:50.230 回答