【问题标题】:Using POI to write date (without time)使用 POI 写入日期(无时间)
【发布时间】:2013-02-06 06:01:58
【问题描述】:

当我使用 POI 写出日期时,我还会在 Excel 中看到时间。 (显示的时间是写入单元格时我机器上的时间)。 这是我用过的代码

XSSFCellStyle dateStyle = wb.createCellStyle();
CreationHelper createHelper = wb.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd-mmm-yyyy"));
Calendar cal = Calendar.getInstance();
cal.set(xx.getYear(), xx.getMonthOfYear(), xx.getDayOfMonth());
cell.setCellStyle(dateStyle);
cell.setCellValue(cal);

单元格中的日期是正确的,即 2013 年 12 月 12 日,但对于该单元格,在公式栏中,时间也会显示。因此单元格显示 2013 年 12 月 12 日,公式栏显示 2013 年 12 月 12 日上午 7:14:39。我在 excel 中检查了单元格的格式,它显示为自定义 dd-mm-yyyy,这是我所期望的。 太清楚了 - 单元格本身显示 2012 年 12 月 12 日,但对于公式栏中的该单元格,时间也会显示。 我还用 Date 替换了 Calendar - 同样的问题。

添加信息:在 excel 中,我将 col 的格式更改为“常规”-对于 POI 添加的单元格,我看到值是 xxx.xxx,例如 41319.3769490278,而当我输入日期时手该值看起来像 41319。看起来小数点后的数字导致时间显示。当我使用 POI 写出来时,不知道如何避免这种情况

【问题讨论】:

  • 您创建的 dateStyle 格式仅应用于单元格,当您执行 'cell.setCellStyle(dateStyle);因此,此格式仅适用于单元格,不适用于公式栏。我不确定您是否可以通过 POI API 更改公式栏格式

标签: excel date apache-poi


【解决方案1】:

好的,解决了。为遇到同样问题的其他人提供此信息。 我查看了 POI 源代码并意识到从日历中计算了一个双精度值,并将单元格值设置为该值。从 cmets 可以清楚地看出,小数点后的数字代表时间。所以我在我的代码中所做的就是截断那个双精度数。更改的行在下面的代码 sn-p 中进行了注释。

XSSFCellStyle dateStyle = wb.createCellStyle();
CreationHelper createHelper = wb.getCreationHelper();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd-mmm-yyyy"));
Calendar cal = Calendar.getInstance();
cal.set(xx.getYear(), xx.getMonthOfYear(), xx.getDayOfMonth());
cell.setCellStyle(dateStyle);
double d = DateUtil.getExcelDate(cal, false); //get double value f
cell.setCellValue((int)d);  //get int value of the double

【讨论】:

  • 完美!非常感谢,找了一天的解决办法!!
  • 工作完美。
【解决方案2】:

您没有完全清除从中获取日期的日历实例,这就是时间到来的原因

您还需要将时间值设置为零,因此您的代码应该如下所示:

Calendar cal = Calendar.getInstance();
cal.set(xx.getYear(), xx.getMonthOfYear(), xx.getDayOfMonth());
calendar.set(Calendar.HOUR, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);

【讨论】:

  • 感谢 Gagravarr。我按照你的建议做了 - 将时间字段设置为 0 - 但无济于事 - 时间仍然显示在公式栏中,除了现在时间显示为 12:00:00 PM。
  • 我想知道您是否需要 HOUR_OF_DAY 而不是 HOUR - 这取决于您的语言环境
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多