无法从.xlsx单元格读取RGB数据

时间:2018-01-31 11:56:27

标签: java excel apache apache-poi

我有一个简单的.xlsx文件,其中包含不同颜色的单元格。我需要弄颜色并检查它们是红色,黄色还是绿色。

excel文件如下所示:

enter image description here

为此,我尝试编写如下代码:

// get Cell color for specificed cells
        CellStyle cellStyle = currentCell.getCellStyle();
        XSSFCellStyle xssfCellStyle = (XSSFCellStyle) cellStyle;
        XSSFColor color = xssfCellStyle.getFillBackgroundXSSFColor();

        // check for null - when there is no cell background color, it returns null
        if (null != color) {
            String rgb =  color.getCTColor().getDomNode().getAttributes().getNamedItem("rgb").getNodeValue();
        }

此代码抛出NullPointerException,因为这里是color.getCTColor().getDomNode().getAttributes().getNamedItem("rgb") == null

然后我研究了另一种方法:

// get Cell color for specificed cells
        CellStyle cellStyle = currentCell.getCellStyle();
        XSSFCellStyle xssfCellStyle = (XSSFCellStyle) cellStyle;
        XSSFColor color = xssfCellStyle.getFillBackgroundXSSFColor();
        if (color != null) {
            cellObject.setBackgroundColor(color.getARGBHex());
            System.out.println("row: " + rowIndex + "col: " + colIndex + "color : " + color.getARGBHex());
        }

但是,在这种方法中,每个单元格中color.getARGBHex()的值为null

编辑:我尝试了另一种更简单的方法:

//get cell colors
        short style = currentCell.getCellStyle().getFillBackgroundColor();
        System.out.println("row:"+rowIndex+",col:"+colIndex+" color: "+style);

此代码返回每个单元格的值:64

编辑:根据Axel的建议,我尝试了这段代码:

short xssfColor = currentCell.getCellStyle().getFillForegroundColor();

但是,此代码对于白色单元格返回64,对于非白色单元格返回0。

有人可以帮忙吗? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

感谢Axel提示。用他的提示,我能够解决这个问题。

我用这段代码来解决这个问题。

// get cell colors
        XSSFColor xssfColor = (XSSFColor) currentCell.getCellStyle().getFillForegroundColorColor();
        if (xssfColor != null)
            System.out.println("row:" + rowIndex + ",col:" + colIndex + " color: " + xssfColor.getARGBHex());

这清楚地区分了所有颜色。 getARGBHex()返回RGB组件以及Alpha值。但是,从数据中提取RGB是很容易的字符串操作

例如:

Red : FFFF0000(由getARGBMex()方法返回,因此RGB值为:FF0000)。

再次感谢Axel的帮助。