如何将XSSF颜色转换为Java.awt.color格式。 因为XSSF颜色无法比较

我明确地发布了代码。 我想在excel中获得单元格的颜色,我发布了我的excel文件,并且只有两种颜色,绿色和黄色。 如果我使用XSSFColor,打印输出是XSSFColor @ 8b21b8fa和XSSFColor @ dfcdb1。 因此,我无法比较它是绿色还是黄色。 如果是黄色,我希望打印出1;如果是绿色,我希望打印出0。 谢谢你的帮助!!!

for(Row row : sheet) { for(Cell cell : row) { switch(formulaEvaluator.evaluateInCell(cell).getCellType()) { case Cell.CELL_TYPE_BLANK: Color cellColor= cell.getCellStyle().getFillForegroundColorColor(); if(cellColor==Color.GREEN) { System.out.print(0+","); } else if(cellColor==Color.YELLOW) { System.out.print(1+","); } } } System.out.println(); } 

这是我的excel文件显示一个madarin字符

尽pipe可以从java.awt.Color创buildXSSFColor ,但是从XSSFColor获取java.awt.Color并不是一个简单的可能。

我们可以将ARGBHexARGBHex与一个新创build的来自java.awt.Color XSSFColor进行比较。

例:

 import java.io.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.xssf.usermodel.XSSFColor; class ColorTest { public static void main(String[] args) { try { InputStream inp = new FileInputStream("ColorTest.xlsx"); Workbook wb = WorkbookFactory.create(inp); Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { for(Cell cell : row) { switch(cell.getCellType()) { case Cell.CELL_TYPE_BLANK: Color cellColor= cell.getCellStyle().getFillForegroundColorColor(); if (cellColor instanceof XSSFColor) { XSSFColor xssfCellColor = (XSSFColor) cellColor; if(xssfCellColor.getARGBHex().equals(new XSSFColor(java.awt.Color.GREEN).getARGBHex())) { System.out.print(0+","); } else if(xssfCellColor.getARGBHex().equals(new XSSFColor(java.awt.Color.YELLOW).getARGBHex())) { System.out.print(1+","); } } break; } } } System.out.println(); } catch (InvalidFormatException ifex) { } catch (FileNotFoundException fnfex) { } catch (IOException ioex) { } } } 

但是在你提供的图片中,绿色似乎并不是真正的绿色,而是RGB 00FF00,而是绿色的混合物。 所以与java.awt.Color.GREEN的比较将不匹配,因为java.awt.Color.GREEN正好是RGB 00FF00。

XSSFHSSF示例:

 import java.io.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.xssf.usermodel.XSSFColor; import org.apache.poi.hssf.util.HSSFColor; class ColorTest { public static void main(String[] args) { try { //InputStream inp = new FileInputStream("ColorTest.xlsx"); InputStream inp = new FileInputStream("ColorTest.xls"); Workbook wb = WorkbookFactory.create(inp); Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { for(Cell cell : row) { switch(cell.getCellType()) { case Cell.CELL_TYPE_BLANK: Color cellColor= cell.getCellStyle().getFillForegroundColorColor(); if (cellColor instanceof XSSFColor) { XSSFColor xssfCellColor = (XSSFColor) cellColor; System.out.println(xssfCellColor.getARGBHex()); if(xssfCellColor.getARGBHex().equals(new XSSFColor(java.awt.Color.GREEN).getARGBHex())) { System.out.println(cell.getAddress() + " is green"); } else if(xssfCellColor.getARGBHex().equals(new XSSFColor(java.awt.Color.YELLOW).getARGBHex())) { System.out.println(cell.getAddress() + " is yellow"); } } else if (cellColor instanceof HSSFColor) { HSSFColor hssfCellColor = (HSSFColor) cellColor; System.out.println(hssfCellColor.getHexString()); if(hssfCellColor.getHexString().equals("0:FFFF:0")) { System.out.println(cell.getAddress() + " is green"); } else if(hssfCellColor.getHexString().equals("FFFF:FFFF:0")) { System.out.println(cell.getAddress() + " is yellow"); } } break; } } } } catch (InvalidFormatException ifex) { } catch (FileNotFoundException fnfex) { } catch (IOException ioex) { } } }