2014-03-06 125 views
0

我正在使用POI库来处理Excel文件,我想更改特定单元格的ForGroundColor。由于我对IndexedColors列表不满意,我想通过替换已存在的列表(我的情况为HSSFColor.BLUE)来创建自己的列表,问题是 - 它仅保存上次迭代的颜色(所有单元格都相同颜色)。在Excel中动态更改单元格颜色

代码(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); 
      } 
     } 

回答

2

你的问题是,你要创建一个单独的单元格样式,将其分配给了一堆细胞,然后改变它蓝色部分通过。因为单元格样式是全局的,所以蓝色适用于所有内容

而是,您需要移动循环外部的“重新定义蓝色”,或创建新的单元格样式+为它们应用颜色,细胞。但是,颜色和单元格样式的数量有限制,因此如果您有多个单元需要相同的颜色,请确保重新使用它们。