Question

J'utilise l'API HSSF POI pour mes manipulations Excel en Java. J'ai une valeur de date « 8/1/2009 » dans l'une de ma cellule Excel et pendant que j'essaie de lire cette valeur en utilisant l'API HSSF, il détecte le type de cellule numérique et renvoie la valeur « double » de ma date. Voir l'exemple de code ci-dessous:

cell = row.getCell(); // date in the cell '8/1/2009'
switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:
    cellValue = cell.getRichStringCellValue().getString();
    break;
case HSSFCell.CELL_TYPE_NUMERIC:
    cellValue = new Double(cell.getNumericCellValue()).toString();
    break;
default:
}

Cell.getCellType () retourne NUMERIC_TYPE et donc ce code convertit la date en double! : (

Est-il possible de lire la date comme dans POI HSSF!

Était-ce utile?

La solution

Vous pouvez jeter un oeil à:

HSSFDateUtil.isCellDateFormatted()

Voir l'API Horrible format tableur POI pour plus de détails sur HSSFDateUtil:

http://poi.apache.org/ apidocs / org / apache / poi / HSSF / userModel / HSSFDateUtil.html

Cela fournit également des méthodes d'aide pour le retour Excel et Java dates getExcelDate() getJavaDate(). Vous devez être un peu méfiant des différents formats de date mais ...

Autres conseils

Si vous voulez faire référence à la date dans le même format que dans le fichier Excel, vous devez utiliser le CellDateFormatter. Exemple de code:

CellValue cValue = formulaEv.evaluate(cell);
double dv = cValue.getNumberValue();
if (HSSFDateUtil.isCellDateFormatted(cell)) {
    Date date = HSSFDateUtil.getJavaDate(dv);

    String dateFmt = cell.getCellStyle().getDataFormatString();
    /* strValue = new SimpleDateFormat(dateFmt).format(date); - won't work as 
    Java fmt differs from Excel fmt. If Excel date format is mm/dd/yyyy, Java 
    will always be 00 for date since "m" is minutes of the hour.*/

    strValue = new CellDateFormatter(dateFmt).format(date); 
    // takes care of idiosyncrasies of Excel
}

Excel traite les dates et heures que le nombre ... Jon dit mieux, donc je ne l'écho ici ...

Cependant, exemple de code pour ce que vous avez mis dans la question est à http : //poi.apache.org/spreadsheet/quick-guide.html#CellContents

Si vous en utilisant le 3,5 POI, vous pouvez utiliser les éléments suivants

méthode cell.getDateCellValue (). Cela fonctionne pour Excel 2007 ainsi.

Depuis POI 3.15 beta3 certaines fonctions sont deprecated. Vous pouvez vérifier le format de données et récupérer comme Java Date.

SimpleDateFormat format = new SimpleDateFormat("");
String cellValue;
if(cell != null && cell.getCellTypeEnum() != CellType.STRING &&
    cell.getCellTypeEnum() == CellType.NUMERIC && DateUtil.isCellDateFormatted(cell)){

    cellValue = format.format(cell.getDateCellValue());
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top