【问题标题】:Reading date value from excel cell as a String从excel单元格中读取日期值作为字符串
【发布时间】:2012-05-23 22:06:16
【问题描述】:

我正在使用 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:
}

有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 看看这个帖子,和你的问题差不多。 stackoverflow.com/questions/3148535/…
  • @mashhur 在您的链接上,根据我的要求没有解决方案。
  • 我认为您收到的是数字而不是字符串,因为单元格的类型是数字。您确定密码单元格的数字类型正确吗?

标签: java apache-poi


【解决方案1】:

您在 POI 中寻找的课程是 DataFormatter

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

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

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

【讨论】:

  • 好吧,我检查了 DataFormatter,我将格式化日期字符串,即“41045”到“16/05/2012”。但是如果用户输入字符串为“05/16/2012”怎么办?在这里,我将有相同的日期字符串“41045”,但根据逻辑它将转换为“16/05/2012”而不是“05/16/2012”。或者我怎么知道用户输入了什么格式?
  • 当用户在单元格中输入一个值时,会对其应用一种格式(自动或显式),这是用于呈现它的格式。 DataFormatter 将简单地根据该格式呈现单元格。
  • 您好@NandkumarTekale,请问您是如何将“41045”转换为“05/16/2012”的。??
  • @ederrafo 这是自 1900 年 1 月 1 日或 1904 年以来的日子,具体取决于工作簿设置。只需向 Apache POI 询问单元格的日期值即可为您完成转换
【解决方案2】:

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

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

【讨论】:

  • 这就是我所说的实用答案。谢谢!
【解决方案3】:

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

【讨论】:

  • 此解决方案要求输入数据的用户为了程序而知道并记住这一点(他们甚至可能不知道)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多