我已经清楚地发布了代码。 我想获取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();
}
最佳答案
虽然可以从 java.awt.Color
创建 XSSFColor
,但无法简单地获取 java.awt.Color
来自 XSSFColor
的 code>。
我们可以将单元格外的 XSSFColor
的 ARGBHex
与新创建的 XSSFColor
的 ARGBHex
进行比较> 来自 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。
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) {
}
}
}
关于java - 如何将 XSSF 颜色转换为 Java.awt.color 格式。因为XSSF颜色无法进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36512900/