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

标签 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

最佳答案

虽然可以从 java.awt.Color 创建 XSSFColor,但无法简单地获取 java.awt.Color来自 XSSFColor 的 code>。

我们可以将单元格外的 XSSFColorARGBHex 与新创建的 XSSFColorARGBHex 进行比较> 来自 java.awt.Color

示例:

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) {
  }
 }
}

关于java - 如何将 XSSF 颜色转换为 Java.awt.color 格式。因为XSSF颜色无法进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512900/

相关文章:

java - 使用apache poi将数据库查询结果导出到excel

java - Apache POI 保留现有的 Excel 格式样式

java - 多线程访问方法

java - 错误 : class org. hibernate.ejb.HibernatePersistence 将接口(interface) org.hibernate.ejb.AvailableSettings 作为父类(super class)

excel - 如何在 Powershell 脚本中使用 VBA 代码

excel - 如何从字符串中查找斜杠出现的次数

java - 如何避免并发 UDP 服务器丢包

java - 在 Java 8 中避免多个并行 if else 循环的最佳方法

Javascript 使用 SheetJS 在服务器上读取 Excel 文件

java - 无效的 Apache POI HeaderFooterType.EVEN