1

嗨,我正在尝试使用HSSFCell. 我的 excel shhet 由 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 AM ..但它把值作为某个日期,例如 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 回答