我是Java编程的新手,这是我的第一篇文章,所以希望这是一个有效的问题。我翻遍了档案,但找不到合适的答案。
我的班级正在阅读和验证一个电子表格。错误的单元格被设置为带有红色背景的样式,有效的单元格被设置为没有反循环的样式。这一切都很好,直到遇到日期单元格。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??
}
数字格式模式是单元格样式的一部分。因此,当您将单元格样式设置为new时,还将数字格式模式设置为default。
您可以使用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);
}
...
如何为单个单元格设置两种不同的样式?当前我正在显示中的单元格值 粗体 货币格式,例如:.
我无法将此行的样式设置为: 它给我的错误是“无法在基元类型void上调用setCellValue(String)”。这种情况下的错误是什么?我如何在单行代码中实现所有3个目标?
setColumn 样式影响范围为整列。 设置 range 参数为 A1:D1,第一反应是设置第一行的前四个单元格样式,但是实际效果确是设置 第一列、第二列、第三列、第四列 整列。 函数原型 setColumn(string $range, double $width [, resource $formatHandler]); string $range $config = ['path' =>
setRow 样式影响范围为整行。 设置 range 参数为 A1:D1,第一反应是设置第一行的前四个单元格样式,但是实际效果确是设置 第一行整行。 如果是 A1:B3 ,就会设置 第一行、第二行、第三行样式,因为单元格范围覆盖了 第一行、第二行、第三行。 函数原型 setRow(string $range, double $height [, resource $formatHandler]);
问题内容: 我已经使用Apache POI一段时间来以编程方式读取现有的Excel 2003文件。现在,我有一个新的要求,即在内存中创建整个.xls文件(仍然使用Apache POI),然后将它们最后写入文件中。困扰我的唯一问题是带日期的单元格的处理。 考虑以下代码: 当我将包含此单元格的工作簿写到文件中并用Excel打开它时,该单元格将显示为数字。是的,我确实意识到Excel将其“日期”存储为自