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

时间:2016-04-09 04:54:59

标签: java excel apache-poi 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();
}

this is my excel file shows a madarin character

1 个答案:

答案 0 :(得分:1)

虽然可以从java.awt.Color创建java.awt.Color,但很难从XSSFColor获取ARGBHex

我们可以将单元格XSSFColor的{​​{1}}与ARGBHex中新创建的XSSFColor的{​​{1}}进行比较。

示例:

java.awt.Color

但是在你提供的图片中,RGB 00FF00的绿色似乎不是真正的绿色,而是混合绿色。因此,与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) { } } } 的比较将不匹配,因为java.awt.Color.GREEN 正好是RGB 00FF00。

java.awt.Color.GREENXSSF的示例:

HSSF