Как найти в листе Excel определенную дату, используя Apache POI? - PullRequest
5 голосов
/ 04 января 2011

Я использовал пример кода, приведенный для поиска содержимого листа:

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

}

Но не могу найти способ правильно сравнить даты, извлеченные из листас заданной датой.Я попытался использовать проверку данных, а также форматирование даты в строку и включение дополнительных условных выражений, но ничего не помогло.

кажется относительно простой проблемой, которая необходима, но пока не удалось ее исправить?

любая помощь будет принята с благодарностью!

Ответы [ 3 ]

3 голосов
/ 04 января 2011

Excel хранит даты как десятичные числа с плавающей запятой, что, очевидно, отличается от способа обработки дат в Java (long значения).

Apache POI содержит вспомогательный класс для преобразования даты между Java и Excel: DateUtil. Это должно помочь (если я правильно понял вашу проблему).

0 голосов
/ 17 декабря 2013

Использование Класс DataFormatter (Apache POI):

 DataFormatter df = new DataFormatter();
 String cellValue = df.formatCellValue(Cell cell);
0 голосов
/ 04 января 2011

Я заметил, что если вы прочитаете число с листа, даже если вы прочитаете его как строку, вы получите число как десятичное число.

Что я делаю, я сохраняю все данные в ячейках, начиная с подчеркивания '_', поэтому, если я пытаюсь прочитать данные из любой ячейки как строку, я не получаю десятичные числа или что-либо еще.

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