我有一个简单的.xlsx文件,其中包含不同颜色的单元格。我需要弄颜色并检查它们是红色,黄色还是绿色。
excel文件如下所示:
为此,我尝试编写如下代码:
// 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。
有人可以帮忙吗? 提前谢谢!
答案 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的帮助。