JavaでのExcel操作にPOI HSSF APIを使用しています。 Excelセルの1つに日付値「8/1/2009」があり、HSSF APIを使用してこの値を読み取ろうとすると、セルタイプが数値として検出され、日付の「Double」値が返されます。以下のサンプルコードを参照してください。
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()はNUMERIC_TYPEを返すため、このコードは日付を2倍に変換します! :(
HSSF POIにある日付を読み取る方法はありますか?
あなたは見てみることができます:
_HSSFDateUtil.isCellDateFormatted()
_
HSSFDateUtilの詳細については、POI Horrible Spreadsheet Format APIをご覧ください。
http://poi.Apache.org/apidocs/org/Apache/poi/hssf/usermodel/HSSFDateUtil.html
また、Excel getExcelDate()
およびJava dates getJavaDate()
。)を返すためのヘルパーメソッドも提供されます。ただし、異なる日付形式には注意が必要です.
Excelファイルと同じ形式で日付を参照する場合は、CellDateFormatterを使用する必要があります。サンプルコード:
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は日付と時刻を数字として扱います...
ただし、質問に記入したサンプルコードは http://poi.Apache.org/spreadsheet/quick-guide.html#CellContents にあります。
POI 3.5を使用している場合は、次を使用できます
cell.getDateCellValue()メソッド。これはExcel 2007でも機能します。
POI 3.15 beta3以降、一部の関数はdeprecated
です。データ形式を確認して、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());
}