2016-03-23 3 views
0

Ich habe zuvor .xls (auch von Apache POI) generiert, wieder geöffnet und die Hintergrundfarbe um den Zellwert geändert. Problem ist, dass Hintergrund nicht bei allen Zellen geändert wird, sondern nur in ersten ca. 50 Zeilen, andere bleiben bei weißen bg. Funktion mark() in einem für den Zyklus habe ich versucht, Werte zu entleeren, Zeilennummern, versuchte am Ende Iterierte xls immer wieder assing Farbe und nichts funktioniert ...POI fügt Zellenhintergrund nur für die ersten 50 Zeilen hinzu

import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Cell; 
import org.apache.poi.ss.usermodel.CellStyle; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Font; 

public class Xls { 

    private FileOutputStream fileOut; 
    private Sheet xlsSheet; 
    private HSSFWorkbook xlsWorkbook; 
    private CellStyle cellStyle; 

    public Xls(String path) { 
    try { 
     fileOut = new FileOutputStream(path); 
     this.xlsWorkbook = new HSSFWorkbook(); 
     this.xlsSheet = xlsWorkbook.createSheet("test"); 

     cellStyle = this.xlsWorkbook.createCellStyle(); 

     Row row1 = xlsSheet.createRow((int) 0); 

     this.xlsSheet.autoSizeColumn(0, true); 
     this.xlsSheet.autoSizeColumn(1, true); 
     this.xlsSheet.autoSizeColumn(2, true); 
     this.xlsSheet.autoSizeColumn(3, true); 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    public void mark(int rowNumber, String status) { 
     short color = Constants.getColor(status); 

     CellStyle style = this.xlsWorkbook.createCellStyle(); 

     style.setFillForegroundColor(color); 
     style.setFillPattern(CellStyle.SOLID_FOREGROUND); 
     //TODO!!! Why filling color only in first 50 rows?! 
//   System.out.println("Changing row " + sameRows.get(rowNumber) + " status is:'" + status + "' color:" + color); 
      Row row = xlsSheet.getRow(sameRows.get(rowNumber)); 
      Cell statusCell = null; 
      if (!isCellEmpty(row.getCell(3))) { 
       statusCell = row.getCell(3); 
      } else { 
       statusCell = row.createCell(3); 
      } 

      statusCell.setCellValue(status); 
      statusCell.setCellStyle(style); 
     } 
    } 

} 

Haben Sie eine Ahnung, wo Fehler sein? HINWEIS: setCellValue() funktioniert - alle Felder haben die richtigen Werte.

Antwort

2

CellStyles sollten nicht für jede Zelle neu erstellt werden, sie sind eine begrenzte Ressource in einer Excel-Datei (Limit wird von Excel selbst auferlegt), also erstellen Sie das Stilobjekt nur einmal und verwenden Sie es für alle Zellen wieder sollte den gleichen Stil haben.

+0

Danke, ich habe mehr Farben, also habe ich einige Variablen erstellt und es funktioniert ;-) –