在Excel中动态更改单元格颜色

时间:2014-03-06 09:31:00

标签: java excel apache-poi

我正在使用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);
            }
        }

1 个答案:

答案 0 :(得分:2)

你的问题是你正在创建一个单一的单元格样式,将它分配给一堆单元格,然后将其更改为蓝色部分。由于单元格样式是全局的,因此蓝色适用于所有内容

相反,您需要在循环外部移动“重新定义蓝色是什么”,或者为每个不同颜色的单元格创建新的单元格样式+应用颜色。但是,您可以拥有的颜色和单元格样式数量有限制,因此如果您有多个想要相同颜色的单元格,请确保重复使用它们