1

我正在使用 POI 3.8 版本并尝试读取 excel 表 (XLS) 中单元格的背景颜色。理想情况下,我想将此带有样式的单元格复制到另一张纸上。当我执行cloneFrom(..)方法时,它没有将正确的颜色复制到目标表。

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

是否有从单元格读取背景颜色的正确方法?

我试过以下

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

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

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

4

1 回答 1

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 值。

于 2012-06-20T17:48:27.797 回答