2011-01-04 7 views
5

Ich habe den Beispielcode wurde über die angegebenen das Inhalt des Blattes zu suchen:Wie Sie mit Apache POI ein Excel-Blatt für ein bestimmtes Datum suchen?

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

}

aber kann nicht einen Weg, um richtig zu vergleichen, die Daten aus dem Blatt mit einem bestimmten Zeitpunkt extrahierten finden. Ich habe versucht, eine Datenüberprüfung zu verwenden und auch das Datum zu einer Zeichenkette zu formatieren und weitere bedingte Anweisungen einzuschließen, aber nichts hat funktioniert.

scheint wie ein relativ einfaches Problem und notwendig, aber nicht in der Lage, es noch zu beheben?

jede Hilfe würde sehr geschätzt werden!

Antwort

3

Excel speichert Datumsangaben als Fließkomma-Dezimalstellen, die - offensichtlich - anders sind als die Java-Daten (long Werte).

Apache POI enthält eine Hilfsklasse für die Datumskonvertierung zwischen Java und Excel: DateUtil. Dies sollte helfen (wenn ich Ihr Problem richtig gelöst habe).

+0

verwaltet mit dateutil spielen, um und bekam eine Art von Lösung für die Hilfe in Strings und getExcelDate dank Umwandlung – Jsk

0

Ich bemerkte, dass wenn Sie eine Zahl aus dem Blatt lesen, auch wenn Sie es als eine Zeichenfolge lesen, erhalten Sie die Zahl als Dezimalzahl.

Was ich mache, ich behalte alle Daten in den Zellen beginnen mit Unterstrich '_', wenn ich also versuche, Daten aus einer Zelle als String zu lesen, bekomme ich keine Dezimalzahlen oder irgendetwas.

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

Verwenden DataFormatter Klasse (Apache POI):

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