我想用不同的颜色设置不同单元格的背景颜色。但是,它始终为工作表的整个列设置一种颜色。以下是我的代码段:
for (int i = 1; i < rowTotal; i++) {
info("Read row " + i);
XSSFRow dataRow = getRowData(i);
setRowNumber(i);
try {
// do something
setCellData("Passed", getRowNumber(), getColumnNumber());
backgroundStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
backgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
currentCell = dataRow.getCell(getColumnNumber());
currentCell.setCellStyle(backgroundStyle);
} catch (Exception e) {
setCellData("Failed", getRowNumber(), getColumnNumber());
backgroundStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
backgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
currentCell = dataRow.getCell(getColumnNumber());
currentCell.setCellStyle(backgroundStyle);
}
}
它有效,但是所有单元格均为红色。我希望“通过”单元格应该是绿色,但是“通过”单元格也应该是红色。
我想念什么?
谢谢。
CellStyle
apache-poi不打算为不同的样式使用单个实例。
每个CellStyle
样式都定义一个可以应用于单元格的样式,而您想要在工作簿中使用的每种不同样式都需要一个样式,因为样式是在工作簿级别定义的。它们应该被重用,这也适用于Font
中的CellStyles
,它们也应该被唯一定义。工作簿可以处理或存储的样式最多,但是我不知道它的确切价值。
在您的使用示例中,建议在循环之前创建样式(至少,在实际代码中可能会有更好的样式创建位置),然后应用单元格所需的样式:
// create one style for a green background
CellStyle greenBackgroundStyle = wb.createCellStyle();
greenBackgroundStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
backgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// and another one for a red background
CellStyle redBackgroundStyle = wb.createCellStyle();
redBackgroundStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
redBackgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// then start looping
for (int i = 1; i < rowTotal; i++) {
info("Read row " + i);
XSSFRow dataRow = getRowData(i);
setRowNumber(i);
try {
// do something
setCellData("Passed", getRowNumber(), getColumnNumber());
currentCell = dataRow.getCell(getColumnNumber());
// set the style with green background
currentCell.setCellStyle(greenBackgroundStyle);
} catch (Exception e) {
setCellData("Failed", getRowNumber(), getColumnNumber());
currentCell = dataRow.getCell(getColumnNumber());
// set the style with red background
currentCell.setCellStyle(redBackgroundStyle);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句