Невозможно прочитать цвет ячейки файла xls, используя Apache POI

import org.apache.poi.ss.usermodel
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


// Assume this method is wrapped in a class
public static void parseFile(){
    // File Path has a .xls extension
    FileInputStream file = new FileInputStream(filePath);
    HSSFWorkbook wb = new HSSFWorkbook(file);
    HSSFSheet sheet = wb.getSheetAt(0);

    for(int rn = sheet.getFirstRowNum(); rn <= sheet.getLastRowNum(); rn++){
        HSSFRow row = sheet.getRow(rn);

        for(int cn = 0; cn < row.getLastCellNum(); cn++){
            HSSFCell cell = row.getCell(cn);
            //This is apache's color
            HSSFColor color = cell.getCellStyle().getFillBackgroundColorColor; 

            // Excel entire row is red and it is not entering here.
            if(color.equals(IndexedColors.RED)){
                System.out.println("I made it here!");
                cn++;
                continue;
            }
        }
    }
}

Файл обрабатывается нормально, но он не войдет в мое "если заявление". Я делаю это неправильно? Можно ли это сделать с помощью файлов xls? Я вижу примеры для xlsx, но я не вижу ни одного для xls. Спасибо!

1 ответ

Метод getFillBackgroundColorColor() возвращает следующий тип:

org.apache.poi.ss.usermodel.Color

не

java.awt.Color

Один из способов проверить RED - это проверить значения RGB, например:

byte[] rgb=colore.getRGB();
System.out.println("color" + " " + rgb[0] + " " + rgb[1] + " " + rgb[2] );
if ( (rgb[0] == (byte)0xff) 
  && (rgb[1] == 0)
  && (rgb[2] == 0)) {
     System.out.println("that is totally red");
}

главное, не перепутайте класс Color apachePOI с java.awt.Color

Другие вопросы по тегам