在ApachePOI-Java中处理时间戳Excel列

在ApachePOI-Java中处理时间戳Excel列,java,oracle,apache-poi,Java,Oracle,Apache Poi,我使用ApachePOI读取excel数据,并用Java处理它们。 要处理的数据在Excel表格中,这是从Toad填充的。后端是Oracle,因此数据类型还包括日期和时间戳列,这些列以这种格式填充在Excel中 日期:2012年1月7日00:00:00 时间戳:01/07/2012 00:00:00.000 excel文件名是静态的,但它包含的数据会有所不同,因为它以不同的间隔填充了来自不同表/视图的数据 我能够使用 //Set the date format for the data fiel

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

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

我能够使用

//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);
问题
但对于时间戳列,HSSFCell.CELL\u TYPE\u NUMERIC对于这些单元格不适用,因此HSSFDateUtil.isCellDateFormatted不适用于这些单元格。因此,我无法为时间戳列指定格式。 我通过查询(使用Java)将excel中的数据与Oracle表中的实际数据进行比较,由于这种格式问题,它们不匹配

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

更新

在浏览web寻找替代解决方案之后,目前我采用了一种静态方法,希望时间戳数据具有特定的格式

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时,此选项才有效


对于以不同格式寻址时间戳值的任何有效解决方案,我们将不胜感激。

好的,有一种简单的方法可以做到这一点

从DB中获取具有时间戳数据类型的列名,并与Excel工作表的标题进行比较

如果Excel标题与DB的列名匹配,则使用单独的SimpleDataFormat(“yyyy-MM-dd'T'HH:MM:ss.S'Z')并执行您的活动


这对你合适吗?

我不熟悉这种方法-Class\u Class=Class.forName(columnNo);您能否提供一些有关如何使用此方法提取excel列的类详细信息的详细信息?我已经考虑过这种方法,但这会带来复杂性,因为当前的实现首先提取excel数据,将其填充到arraylist中,然后运行实际查询以与excel数据进行比较。实际的查询可以是一个简单的查询、函数、过程,甚至是任意的块。因此,我一直在寻找一个简单的解决方案,就像您之前建议的那样,在这里我可以检查excel列,看看它是否是一个时间戳,而不引入任何与数据库的依赖关系。您的第一个建议是否可行且易于实施?