2017-08-06 3 views
2

Ich habe über den ganzen Stack-Überlauf geschaut und konnte anscheinend meinen Java-Code nicht bekommen, um die Hintergrundfarbe einer XSSF-Excel-Zelle zu füllen. Von dem, was andere gesagt haben, sollte dies die obere linke Ecke Zelle gelb machen:Java Apache POI - XSSFCell setFillBackgroundColor hat keinen Effekt

// Example Code 
try { 

    // prepare 
    FileInputStream resource = new FileInputStream(FILEPATH + FILENAME); 
    XSSFWorkbook workbook = new XSSFWorkbook(resource); 
    XSSFSheet sheet = workbook.createSheet("Example Sheet"); 

    // create 
    XSSFRow row = sheet.createRow(0); 
    XSSFCell cell = row.createCell(0); 
    XSSFCellStyle style = workbook.createCellStyle(); 
    XSSFColor color = new XSSFColor(Color.YELLOW); 

    // stylize 
    style.setFillBackgroundColor(color); 
    cell.setCellStyle(style); 

    // finalize 
    FileOutputStream output = new FileOutputStream("Example Workbook.xlsx"); 
    workbook.write(output); 
    workbook.close(); 

} catch (Exception e) { 

    // error 
    e.printStackTrace(); 

} 

... aber es nicht. Kann mir jemand sagen, was ich falsch mache? Ich benutze Apache POI Version 3.16 übrigens.

Danke!

+0

Schließen Sie die '' Ausgabe –

Antwort

2

Drei Eigenschaften von CellStyle bestimmen, wie eine Zelle gefüllt ist:

  • FillPattern
  • FillForegroundColor
  • FillBackgroundColor

meisten Füllmuster wie FillPatternType.BIG_SPOTS Gebrauch beiden Farben. Der Name FillForegroundColor ist irreführend, aber verständlich. Es ist die Vordergrundfarbe des Füllmusters, die immer noch im Hintergrund der Zelle ist.

Um eine Zelle mit einer Farbe zu füllen, müssen Sie FillPatternType.SOLID_FOREGROUND verwenden, die die Vordergrund Farbe verwendet. So müssen Sie den Code wie folgt ändern:

// stylize 
style.setFillForegroundColor(color); 
style.setFillPattern(FillPatternType.SOLID_FOREGROUND); 
cell.setCellStyle(style); 
+0

alle wahr außer dem zusätzlichen postscriptum über den Ausgangsstrom zu schließen, da 'workbook.close();' ist dies bereits tun. –

+0

Danke, wusste das nicht, ich entfernte das Postscriptum. – r0the

+0

Ihre Antwort hat perfekt funktioniert, danke. – Ibrahim