如何将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
并不是一个简单的可能。
我们可以将ARGBHex
的ARGBHex
与一个新创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。
XSSF
和HSSF
示例:
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) { } } }