2016-09-23 4 views
0

Ich versuche zu lernen, wie Apache POI mit einem kleinen Projekt zu verwenden. Ich möchte mithilfe von Excel "Raumlayouts" mithilfe von farbcodierten Zellen erstellen und die Daten in ein Java-Programm laden. Ich denke, verstehen, wie man auf die Farbeigenschaften einer Zelle zugreifen kann, aber was ich frage ist:Get Cell Color mit Apache POI

Ist es möglich, auf die Farbe einer leeren Zelle zuzugreifen (keine Daten oder Wert), oder muss eine Zelle haben Daten, damit Apache POI es lesen kann?

Ich interessiere mich nur für die Farbe, also könnte es vorzuziehen sein, Junk-Daten in den Zellen zu platzieren, oder möglicherweise durch sie basierend auf Koordinaten zu iterieren? Ich bin neu bei Apache POI, daher wird jede Hilfe sehr geschätzt.

Antwort

3

Was haben Sie versucht? Bitte lesen Sie Busy Developers' Guide to HSSF and XSSF Features.

Gesetzt folgende Arbeitsmappe:

enter image description here

Dann wird der folgende Code sollte auch mit a.xls (HSSF) als mit a.xlsx (XSSF) arbeiten.

import org.apache.poi.ss.usermodel.*; 
import org.apache.poi.xssf.usermodel.*; 
import org.apache.poi.hssf.util.HSSFColor; 
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; 

import java.io.*; 

class ReadExcelEmptyColoredCells { 

public static void main(String[] args) { 
    try { 

    //Workbook workbook = WorkbookFactory.create(new File("a.xls")); 
    Workbook workbook = WorkbookFactory.create(new File("a.xlsx")); 

    Sheet sheet = workbook.getSheetAt(0); 

    for (Row row : sheet) { 
    for (Cell cell : row) { 
    if (! "".equals(String.valueOf(cell))) 
     System.out.println(cell.getAddress() + ": " + String.valueOf(cell)); 
    CellStyle cellStyle = cell.getCellStyle(); 
    Color color = cellStyle.getFillForegroundColorColor(); 
    if (color != null) { 
     if (color instanceof XSSFColor) { 
     System.out.println(cell.getAddress() + ": " + ((XSSFColor)color).getARGBHex()); 
     } else if (color instanceof HSSFColor) { 
     if (! (color instanceof HSSFColor.AUTOMATIC)) 
     System.out.println(cell.getAddress() + ": " + ((HSSFColor)color).getHexString()); 
     } 
    } 
    } 
    } 

    workbook.close(); 

    } catch (InvalidFormatException ifex) { 
    } catch (FileNotFoundException fnfex) { 
    } catch (IOException ioex) { 
    } 
} 
} 
+0

Ich hatte noch nicht wirklich alles versucht, weil ich einfach nicht wirklich wusste, wo ich anfangen soll, und habe nie die Kurzanleitung gefunden. Ein Blick über Ihren Code wird jedoch sehr nützlich sein, um sich mit der Funktionsweise vertraut zu machen. Vielen Dank. – Geo