1

こんにちは私は。でExcelシートの値を読み取ろうとしていHSSFCellます。私のExcelシェットは4列で構成されています。日付、名前、In_timeおよびOut_time。

私のループで私は与えました。

            HSSFRow row = (HSSFRow) itr.next();
            Iterator cell = row.cellIterator();
            List data = new ArrayList();
            while(cell.hasNext())
            {
                HSSFCell value = (HSSFCell) cell.next();

                if (value.getCellType() == Cell.CELL_TYPE_NUMERIC) 
                {
                    if(HSSFDateUtil.isCellDateFormatted(value))
                    {
                        if(HSSFDateUtil.isADateFormat((int)value.getNumericCellValue(), "dd:mmm:yyyy"))
                        {
                            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                            String date = df.format(value.getDateCellValue());
                            data.add(date);
                        }
                                             }
                        else

                    {
                        data.add(value.getNumericCellValue());
                    }
                }
                else if (value.getCellType() == Cell.CELL_TYPE_STRING)
                {
                    data.add(value.getStringCellValue());
                }
                else
                {
                    data.add("");
                }
            }
            sheetData.add(data);

フィールドの日付と名前は正しく取得されています。しかし、私が時間を取得しようとすると、その日付の値が与えられます。たとえば、私のExcelでは、午前4:05:12の時間があります。しかし、1899-12-30のような日付として値を取得します。 Apache POIを使用してExcelシートから日付値を読み取るにはどうすればよいですか?

4

1 に答える 1

2

SimpleDateFormatの呼び出しを介して、セルを「yyyy-MM-dd」日付として明示的にフォーマットしているようです。したがって、要求したとおりに取得され、最終的にyyyy-MM-ddの日付文字列になることは驚くべきことではありません。

現在、あなたの質問から取られたあなたの明示的なyyyy-MM-ddコードは、少し奇妙です:

 if(HSSFDateUtil.isCellDateFormatted(value))
     {
     if(HSSFDateUtil.isADateFormat((int)value.getNumericCellValue(), "dd:mmm:yyyy"))
                    {
                        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                        String date = df.format(value.getDateCellValue());
                        data.add(date);
                    }

セルをExcelの場合と同じようにフォーマットする場合は、セルに適用されるフォーマット規則を考慮する必要があります。これを行うと、コードは代わりに次のようになります。

 DataFormatter formatter = new DataFormatter();

 .....

 if(HSSFDateUtil.isCellDateFormatted(value)) {
     String date = formatter.formatCell(value);
 }

セルにyyyy-MM-dd形式が適用されている場合でも、2012-07-20のようなものが表示されます。代わりに時間形式の場合は、それを取得します。

于 2012-07-21T15:36:48.903 に答える