2011-01-04 22 views
5

Sto usando il codice di esempio dato per cercare i contenuti del foglio:Come cercare un foglio Excel per una data specifica utilizzando il POI di Apache?

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

}

Ma non riesce a trovare un modo per confrontare correttamente le date estratti dal foglio con una certa data. Ho provato a utilizzare una convalida dei dati e anche a formattare la data su una stringa e includendo ulteriori dichiarazioni condizionali, ma nulla ha funzionato.

sembra un problema relativamente semplice e necessario ma non è stato ancora possibile risolverlo?

qualsiasi aiuto sarebbe molto apprezzato!

risposta

3

Excel memorizza le date come decimali in virgola mobile che è - ovviamente - diversa dal modo in cui Java gestisce le date (valori long).

POI Apache contiene una classe helper per eseguire la conversione della data tra Java ed Excel: DateUtil. Questo dovrebbe aiutare (se ho risolto il tuo problema).

+0

riuscito a giocare con DateUtil e ottenuto una sorta di soluzione di conversione in stringhe e getExcelDate, grazie per l'aiuto – Jsk

0

Ho notato che se si legge un numero dal foglio, anche se lo si legge come stringa, si otterrà il numero come decimale.

Quello che faccio, tengo tutti i dati nelle celle iniziano con underscore '_', quindi se provo a leggere i dati da qualsiasi cella come una stringa, non ottengo decimali o altro.

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

Usa DataFormatter classe (Apache POI):

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