从excel单元格中读取日期值作为String

时间:2012-05-16 10:46:22

标签: java apache-poi

我正在使用apache poi库来读取excel文件。我在读密码单元时卡住了。如果用户在密码单元格中提供日期作为密码,即16/05/2012。我将此值读为“41045”,而值应为“16/05/2012”。这是我的代码:

cell = row.getCell(); // date in the cell password '16/05/2012'
switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:
    cellValue = cell.getRichStringCellValue().getString();
    break;
case HSSFCell.CELL_TYPE_NUMERIC:
    if(cellCount == TEMPLATE_PASSWORD) {// if cell is password
        cell.setCellType(Cell.CELL_TYPE_STRING);
        cellValue = cell.getRichStringCellValue().getString(); // value read is 41045 and not "16/05/2012"
    }
    break;
default:
}

任何人都可以帮忙吗?

感谢。

3 个答案:

答案 0 :(得分:15)

您在POI中寻找的课程是DataFormatter

当Excel写入文件时,某些单元格存储为文字字符串,而其他单元格存储为数字(包括日期)。对于后者,表示单元格的浮点值存储在文件中,因此当您向POI询问单元格的值时,它实际上具有该值。

有时候,特别是在进行文本提取时(但并非总是如此),您希望使单元格值与Excel中的一样。并不总是能够在String(例如非完整空间填充)中完全得到它,但是DataFormatter类会让你关闭。

另请注意,在Excel中,日期存储为自1900年以来的浮点数,这就是为什么您看到的数字不是日期。使用DataFormatter(或类似的)将其呈现为日期

答案 1 :(得分:7)

使用以下代码获取您在Excel工作表中输入的确切日期格式。

DataFormatter df = new DataFormatter();
stringCellValue = df.formatCellValue(cell);

答案 2 :(得分:4)

使用'将单元格值保存到xls中,然后将其放入字符串单元格中。因此,无论您从该单元格中读取什么,都将被视为字符串并按原样读取。

相关问题