Lecture des valeurs de date de la cellule excel à L'aide de L'API POI HSSF

J'utilise L'API POI HSSF pour mes manipulations excel en Java. J'ai une valeur de date "8/1/2009" dans une de mes cellules excel et pendant que j'essaie de lire cette valeur en utilisant L'API HSSF, elle détecte le type de cellule comme 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:
}

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

Est-il possible de lire la date, comme il est dans HSSF PVE !?

30
demandé sur Randomness 2009-05-14 10:43:34

5 réponses

Vous pouvez prendre un coup d'oeil à:

HSSFDateUtil.isCellDateFormatted()

voir L'API de format de tableur poi Horrible pour plus de détails sur HSSFDateUtil:

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFDateUtil.html

cela fournit aussi quelques méthodes d'aide pour retourner Excel getExcelDate() et Java dates getJavaDate(). Vous devez cependant vous méfier un peu des différents formats de date...

37
répondu Jon 2009-05-14 07:05:44

si vous voulez référencer la date dans le même format que dans le fichier Excel, vous devez utiliser la 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
}
21
répondu Sayantam 2011-08-31 18:09:37

Excel traite les dates et les heures comme des nombres... Jon l'a mieux dit, Je ne ferai pas écho ici...

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

6
répondu Stobor 2009-05-14 07:10:36

si vous utilisez le POI 3.5, vous pouvez utiliser

cellule.méthode getDateCellValue (). Cela fonctionnera également pour excel 2007.

6
répondu Naveen 2010-08-04 07:38:47

depuis POI 3.15 beta3 certaines fonctions sont deprecated. Vous pouvez vérifier le format de données et de 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());
}
0
répondu Michał Piątkowski 2017-08-21 11:07:36