2011-01-04 10 views
5

He estado usando el código de ejemplo que se da para buscar el contenido de la hoja:¿Cómo buscar una hoja de Excel para una fecha específica usando 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(); 
    } 
} 

}

pero no puede encontrar una manera de comparar adecuadamente las fechas extraídos de la hoja con una fecha determinada. Intenté usar una validación de datos y también formatear la fecha en una cadena e incluir otras declaraciones condicionales, pero nada ha funcionado.

parece un problema relativamente simple y necesario pero no ha sido capaz de solucionarlo todavía?

¡cualquier ayuda sería muy apreciada!

Respuesta

3

Excel almacena las fechas como decimales de punto flotante que, obviamente, es diferente a la forma en que maneja Java las fechas (valores long).

Apache POI contiene una clase auxiliar para hacer la conversión de fechas entre Java y Excel: DateUtil. Esto debería ayudar (si tu problema es correcto).

+0

lograron jugar con DateUtil y tiene algún tipo de solución para convertir cadenas y getExcelDate, gracias por la ayuda – Jsk

0

Me di cuenta de que si lee un número de la hoja, incluso si lo lee como una cadena, obtendrá el número como decimal.

Lo que hago, conservo todos los datos en las celdas con subrayado '_', por lo que si trato de leer datos de cualquier celda como una cadena, no obtengo decimales ni nada.

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

Uso DataFormatter clase (Apache POI):

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