java - APACHE POI 设置单元格样式清除现有日期格式

标签 java excel date apache-poi

我是 Java 编程新手,这是我的第一篇文章,所以希望这是一个有效的问题。我已经搜索了文件,但找不到合适的答案。
我的类(class)正在阅读和验证电子表格。错误的单元格被设置为红色背景的样式,有效的单元格被赋予没有背景的样式。这一切正常,直到遇到日期单元格。 setCellStyle 语句似乎正在清除日期格式。谁能告诉我如何防止这种情况?
因此,当开始在 Excel 中查看单元格时,它会显示 25/08/20。
在我的程序中将样式更新为背景红色,然后返回 Excel 后,单元格显示为红色,但带有一个像 92345678.0000 这样的数值(我现在不记得确切的值了)。
这是相关的代码:

XSSFCellStyle styleBad = wb.createCellStyle();
XSSFCellStyle styleGood = wb.createCellStyle();
styleGood.setFillPattern(FillPatternType.NO_FILL);
styleBad.setFillForegroundColor(IndexedColors.RED.getIndex());
styleBad.setFillPattern(FillPatternType.SOLID_FOREGROUND);
if (!validateCell(cell, tca[cx], cellValues)) {
  cell.setCellStyle(styleBad);
  errorMessage += ("Cell " + (cx + 1) + " " + cellValues.cellMessage + ". ");
  wbValid = false;
  }
else {
  cell.setCellStyle(styleGood);                        Mucks up date formatting??                                                                     
}

最佳答案

数字格式模式是单元格样式的一部分。因此,当您将单元格样式设置为新时,您还将数字格式模式设置为默认值。
您可以使用 CellUtil添加属性到现有的单元格样式,而不是设置新的。方法CellUtil.setCellStyleProperties能够添加新的单元格样式属性,但保留单元格已存在的单元格样式属性。

...
Map<String, Object> properties = new HashMap<String, Object>();
...

if (!validateCell(cell, tca[cx], cellValues)) {
  properties = new HashMap<String, Object>();
  properties.put(CellUtil.FILL_PATTERN, FillPatternType.SOLID_FOREGROUND);
  properties.put(CellUtil.FILL_FOREGROUND_COLOR, IndexedColors.RED.getIndex());
  CellUtil.setCellStyleProperties(cell, properties); 
  errorMessage += ("Cell " + (cx + 1) + " " + cellValues.cellMessage + ". ");
  wbValid = false;
}
else {
  properties = new HashMap<String, Object>();
  properties.put(CellUtil.FILL_PATTERN, FillPatternType.NO_FILL);
  CellUtil.setCellStyleProperties(cell, properties);       
}
...

关于java - APACHE POI 设置单元格样式清除现有日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63582412/

相关文章:

java - Spring AOP - 异常 : org. springframework.beans.factory.BeanDefinitionStoreException:

java - AngularJs 通过 Maven 和 Jersey 与 Eclipse 集成

java - Joda DateTime 等于 vs isEqual

javascript - 像在 PHP 中一样,在 JavaScript 中获取一年中的第几周

date - 使用 sed 命令插入日期

java - 什么是NullPointerException,我该如何解决?

process - 宏完成后 Excel.exe 保留在内存中

Excel VBA : How to get COUNTIF function to not pick up text cells "1.1" and "1.10" as Duplicates?

excel - 检索列过滤器中的多个项目,然后删除带回的行

jquery - 根据星期几设置 scrollLeft