10

我正在使用 apache poi 库来读取 excel 文件。我在阅读密码单元格时被卡住了。如果用户在密码单元格中给出日期作为密码,即 2012 年 5 月 16 日。我将此值读取为“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:
}

有人可以帮忙吗?

谢谢。

4

3 回答 3

18

您在 POI 中寻找的类是DataFormatter

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

但有时,特别是在进行文本提取时(但并非总是如此),您希望使单元格值看起来像在 Excel 中所做的那样。并非总是可以在字符串中准确地得到它(例如,非完整空间填充),但 DataFormatter 类会让你接近。

另请注意,在 Excel 中,日期从 ~1900 开始存储为浮点数,这就是为什么您看到的是数字而不是日期的原因。使用 DataFormatter (或类似的)将其呈现为日期

于 2012-05-16T20:55:29.067 回答
11

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

DataFormatter df = new DataFormatter();
stringCellValue = df.formatCellValue(cell);
于 2013-11-28T07:43:04.153 回答
5

在将单元格值保存到 xls 时,使用 ' 作为前缀会将其呈现为字符串单元格。因此,您从该单元格读取的任何内容都将被视为字符串并按原样读取。

于 2012-05-16T11:07:35.547 回答