我正在使用POI库处理Excel文件,我想更改特定单元格的ForGroundColor。由于我对IndexedColors列表不满意,我想通过替换一个已经存在的(在我的情况下是HSSFColor.BLUE)来创建我自己的,它的问题是 - 它只保存上一次迭代的颜色(所有单元都有相同的颜色)颜色)。
代码(convData - 两个暗淡的双数组,标准化为255):
HSSFPalette hssfPalette = excelFile.getCustomPalette();
CellStyle cellStyle = excelFile.createCellStyle();
hssfPalette = excelFile.getCustomPalette();
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
for (int i=0; i<convData.length; i++) {
Row row = excelSheet.createRow(i);
for (int j=0; j<convData[i].length; j++) {
Cell cell = row.createCell(j);
hssfPalette.setColorAtIndex(HSSFColor.BLUE.index, convData[i][j].byteValue(), convData[i][j].byteValue(), convData[i][j].byteValue());
cellStyle.setFillForegroundColor(hssfPalette.getColor(HSSFColor.BLUE.index).getIndex());
cell.setCellStyle(cellStyle);
}
}
答案 0 :(得分:2)
你的问题是你正在创建一个单一的单元格样式,将它分配给一堆单元格,然后将其更改为蓝色部分。由于单元格样式是全局的,因此蓝色适用于所有内容
相反,您需要在循环外部移动“重新定义蓝色是什么”,或者为每个不同颜色的单元格创建新的单元格样式+应用颜色。但是,您可以拥有的颜色和单元格样式数量有限制,因此如果您有多个想要相同颜色的单元格,请确保重复使用它们