java - 用 apache poi 写旧日期

标签 java excel date apache-poi

我正在使用 apache poi 3.14 创建一个 excel 文件,该文件必须包含不同类型的数据,包括日期。

我的代码在大多数情况下都能正常工作。 在单元格中编写具体日期 (java.util.Date) 时,我遇到了问题。 这是我的代码:

 Date date;

 // code where I get the value of date

 Cell currentCell = currentRow.createCell(fieldPos++);

 // line below doesn't work for date like '11/11/1811' but work for '11/11/2111'
 currentCell.setCellValue(date);

 currentCell.setCellStyle(myDateStyle);

假设我有 3 个日期要写:

  • 2009 年 1 月 1 日
  • 11/11/2111
  • 11/11/1811

我的 excel 文件看起来像这样:

| 01/01/2009 | 2111 年 11 月 11 日 | 空白单元格 |

当日期等于 11/11/1811 时,currentCell.setCellValue(date) 行将值设置为 -1,因此在我的 excel 文件中它显示为空白(根据我的 dateStyle)

为什么它在特定日期不工作,我该如何解决?

最佳答案

找到原因了!

Apache Poi 的 setCellValue(Date d) 尝试将给定的 java.util.Date 转换为 excel“datenumber”:

Excel stores dates and times as a number representing the number of days since 1900-Jan-0, plus a fractional portion of a 24 hour day: ddddd.tttttt . This is called a serial date, or serial date-time.

这就是为什么当给定 1900 年之前的日期时,setCellValue 会将值设置为 -1,因为它无法进行转换操作。

修复了在 setCellValue(Date d) 设置为 -1 的情况下使用 Date.toString() 调用 setCellValue(String s) 的问题,唯一剩下的问题是我更改了数据。

关于java - 用 apache poi 写旧日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182669/

相关文章:

Excel VBA 按顺序生成随机数并根据多少个

c# - 从 Excel 读取的随机日期格式

vba - ScreenUpdating = False 在 Excel 2013 和 2016 中失败

java - 验证时间戳格式 yyyy-MM-dd'T'HH :mm:ssZ in java?

php date() 与 mysql MONTH()

mysql - Kohana ORM 按日期选择记录

Java Melody 与非 Web 应用程序的集成

java - 如何查找 MultivaluedMap 中键的长度/大小?

windows - 在windows下找到JDK的安装目录

java - 在 Maven 中将一个属性分配给另一个属性