POI阅读细胞背景颜色

时间:2012-06-19 18:19:32

标签: apache-poi

我正在使用POI 3.8版本并尝试读取Excel工作表(XLS)中单元格的背景颜色。理想情况下,我想将带有样式的单元格复制到不同的工作表。当我执行 cloneFrom(..)方法时,它不会将正确的颜色复制到目标工作表。

当我尝试单独读取单元格的背景颜色时,我没有得到正确的RGB值。如果我能得到正确的RGB值,我可以创建一个自定义调色板并将其设置为目标工作表的单元格。

是否有正确的方法从细胞中读取背景颜色?

我试过以下

cell.getCellStyle().getFillBackgroundColor()
cell.getCellStyle().getFillBackgroundColorColor().getTriplet() 

以上行应该给我RGB值159/200/222,但是给我的值不正确51/204/204。

有人可以帮忙。我已经在这个论坛上查了所有可能的答案,但仍然无法得到我想要的东西。

1 个答案:

答案 0 :(得分:3)

问题是HSSF使用调色板(本质上是一组颜色)来定义其RGB值。因此背景颜色实际上是调色板的索引。下面是一些代码来获取单元格背景颜色的实际rgb值:

    CellStyle style = cell.getCellStyle();
    short colorIdx = style.getFillForegroundColor();
    HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette();
    HSSFColor color = palette.getColor(colorIdx);
    short [] triplet = color.getTriplet();
    // triplet will contain the actual rgb values

在输出电子表格中,您必须为调色板添加自定义颜色。如果输出调色板中有空白区域,则可以使用HSSFPalette.addColor。否则,您将不得不使用HSSFPalette.setColorAtIndex替换未使用的现有颜色。添加自定义颜色后,使用CellStyle.setFillBackgroundColor设置单元格的背景颜色,并传入刚刚创建的自定义颜色的索引。

如果您可以使用XSSF(xlsx)文件而不是HSSF(xls)文件,则无需使用调色板。您可以使用实际的rgb值。

相关问题