我是 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/