2011-01-04 11 views
5

Używam przykładowy kod podany do przeszukania zawartości arkusza za:Jak przeszukiwać arkusz Excela dla określonej daty za pomocą Apache POI?

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

}

ale nie może znaleźć sposób, aby poprawnie porównać daty wydobyte z arkusza z danego dnia. Próbowałem przy użyciu sprawdzania poprawności danych, a także formatowania daty na ciąg znaków i zawierające dalsze instrukcje warunkowe, ale nic nie zadziałało.

wydaje się stosunkowo prostym problemem i konieczne, ale nie udało się go jeszcze naprawić?

każda pomoc będzie bardzo ceniona!

Odpowiedz

3

W programie Excel zapisywane są daty w postaci liczb dziesiętnych z liczbami zmiennoprzecinkowymi, co oczywiście różni się od sposobu, w jaki Java obsługuje daty (wartości long).

Punktacja Apache POI zawiera klasę pomocniczą umożliwiającą konwersję dat między programami Java i Excel: DateUtil. To powinno pomóc (jeśli poprawiłem twój problem).

+0

udało się bawić z DateUtil i dostał jakieś rozwiązanie konwersji na smyczki i getExcelDate, dzięki za pomoc – Jsk

0

Zauważyłem, że jeśli czytasz numer z arkusza, nawet jeśli czytasz go jako ciąg znaków, otrzymasz liczbę jako dziesiętną.

Co robię, wszystkie dane w komórkach zaczynam od podkreślenia "_", więc jeśli spróbuję odczytać dane z dowolnej komórki jako ciąg, nie otrzymam wartości dziesiętnych ani niczego.

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

Zastosowanie DataFormatter klasa (Apache POI):

DataFormatter df = new DataFormatter(); 
String cellValue = df.formatCellValue(Cell cell); 
Powiązane problemy