在Apache POI-Java中处理时间戳Excel列



我使用Apache POI读取excel数据,并用Java处理它们。要处理的数据在Excel工作表中,这是从Toad填充的。后端是Oracle,因此数据类型还包括日期和时间戳列,这些列以这种格式填充在Excel中日期:2012年1月7日00:00:00对于时间戳:2012年7月1日00:00:00.000。

excel文件名是静态的,但它所包含的数据会有所不同,因为它以不同的时间间隔填充了来自不同表/视图的数据。

我能够使用处理DATE列

//Set the date format for the data fields
HSSFCellStyle dateStyle = workBook.createCellStyle();
short dateFormat = workBook.createDataFormat().getFormat("yyyy-mm-dd hh:mm:ss");
dateStyle.setDataFormat(dateFormat);
DataFormatter fmt = new DataFormatter();
if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
//Check if data in the cell is a date
if (HSSFDateUtil.isCellDateFormatted(hssfCell))
hssfCell.setCellStyle(dateStyle);

问题
但是,当涉及到TIMESTAMP列时,HSSFCell.CELL_TYPE_NUMERIC对这些单元格不成立,因此HSSFDateUtil.isCellDateFormatted不适用于这些单元格。因此,我无法指定TIMESTAMP列的格式。我通过查询(使用Java)将excel中的数据与Oracle表中的实际数据进行比较,由于格式问题,它们不匹配。

我是Java和POI的新手,所以可能会错过一些愚蠢的东西。关于我如何解决这个问题,有什么意见吗?

更新

在浏览网页寻找替代解决方案后,我暂时采取了一种静态方法,我希望时间戳数据是特定格式的

String timestampIn = "dd/MM/yyyy HH:mm:ss.SSS";
String timestampOut = "yyyy-MM-dd HH:mm:ss.SSS";
try
{
Date date = (new SimpleDateFormat(timestampIn)).parse(fmt.formatCellValue(hssfCell).toString().trim());
//Add data in the cell to the ArrayList
cellTempList.add((new SimpleDateFormat(timestampOut)).format(date));
}
catch (ParseException pe) {
//Add data in the cell to the ArrayList
cellTempList.add(fmt.formatCellValue(hssfCell));
}

只有当Excel中的时间戳格式为dd/MM/yyyy HH:MM:ss.SSS.时,此操作才有效

将赞赏用于以不同格式寻址时间戳值的任何有效解决方案。

好的,有一个简单的方法可以做到。

从数据库中获取具有TIMESTAMP数据类型的列名,并与Excel工作表的页眉进行比较。

如果Excel页眉与DB的列名匹配,则使用单独的SimpleDateFormat("yyyy-MM-dd'TT'HH:MM:ss.S'Z'")并执行您的活动。

你觉得还好吗?

最新更新