2013-07-09 11 views
7

Ich arbeite mit Apache Poi und XLSX-Datei. Ich verwende XSSF-Klassen, um eine Tabelle dynamisch zu erstellen. ich mag for-Schleife in einer Zelle Stil setzen, aber es scheint nicht zu funktionieren ... hier ist mein Code:Einstellung Zelle Stil funktioniert nicht

for(int i=1;i<=gc.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);i++,gc.add(GregorianCalendar.DATE, 1),righe++){ 
     Row r = foglio.createRow(righe); 

     if(getDayOfWeek(gc)== 6 || getDayOfWeek(gc) == 7){ 
      XSSFCellStyle cs1 = wb.createCellStyle(); 
      cs1.setFillBackgroundColor(IndexedColors.YELLOW.getIndex()); 
      cs1.setFillPattern(CellStyle.SOLID_FOREGROUND); 
      XSSFFont f = wb.createFont(); 
      f.setBold(true); 
      f.setColor(IndexedColors.RED.getIndex()); 
      cs1.setFont(f); 
      Cell c1 = r.createCell(0); 
       c1.setCellValue(cost.getGiorni().get(getDayOfWeek(gc)-1).getNomeGiorno()); 
       c1.setCellStyle(cs1); 
      Cell c2 = r.createCell(1); 
       c2.setCellValue(i); 
       c2.setCellStyle(cs1); 
     }    
     r.createCell(0).setCellValue(cost.getGiorni().get(getDayOfWeek(gc)-1).getNomeGiorno()); 
     r.createCell(1).setCellValue(i); 

... das ich nur ein Teil des Codes ... Ich kann nicht verstehen, warum nicht funktioniert. Scheint so, als ob der Zellstil ignoriert oder überschrieben wird ...

irgend ein Hinweis?

Antwort

4

CellStyles sind pro Arbeitsmappe, und es gibt eine harte Grenze, dass Excel die Zahlen, die eine Datei haben darf, auferlegt, so müssen Sie sicherstellen, dass Sie den Zellstil einmal außerhalb der Schleife erstellen.

würde Ihr Code dann etwas wie folgt aussehen:

XSSFCellStyle cs1 = wb.createCellStyle(); 
cs1.setFillBackgroundColor(IndexedColors.YELLOW.getIndex()); 
cs1.setFillPattern(CellStyle.SOLID_FOREGROUND); 

XSSFFont f = wb.createFont(); 
f.setBold(true); 
f.setColor(IndexedColors.RED.getIndex()); 
cs1.setFont(f); 

for(int i=1;i<=gc.getActualMaximum(GregorianCalendar.DAY_OF_MONTH) i++,gc.add(GregorianCalendar.DATE, 1),righe++){ 
    Row r = foglio.createRow(righe); 

    if(getDayOfWeek(gc)== 6 || getDayOfWeek(gc) == 7){ 
     Cell c1 = r.createCell(0); 
     c1.setCellValue(cost.getGiorni().get(getDayOfWeek(gc)-1).getNomeGiorno()); 
     c1.setCellStyle(cs1); 
     Cell c2 = r.createCell(1); 
     c2.setCellValue(i); 
     c2.setCellStyle(cs1); 
    } 
} 

Wenn Sie schauen, Probleme mit dem Styling nicht ganz wie erwartet, wobei die beste Option, um eine Zelle zu stylen ist, wie Sie es in Excel möchten, Speichern Sie die Datei, lesen Sie diese in POI und überprüfen Sie den Zellenstil, den Excel geschrieben hat. Manchmal kann Excel einige seltsame Dinge tun, die gewöhnungsbedürftig sind, also überprüfen Sie, was es tut, um herauszufinden, was Sie tun müssen!

+0

Ich habe bereits versucht, Sie Methode aber löst nichts ... Ich habe auch über eine XLSX-Modelldatei erstellen, aber ich produziere eine 100% dynamische Kalkulationstabelle auf der Grundlage einiger Kriterien zur Laufzeit definiert durch den Benutzer ... – Medioman92

+0

Darüber hinaus, wenn ich die "IndexedColor" -Klasse verwenden, um einen Hintergrund zu setzen, ergibt es immer schwarz – Medioman92

+1

Siehe meinen Rat am Ende der Antwort - erstellen Sie es wie Sie wollen in Excel, lesen Sie das von POI, und erarbeiten Welche Optionen müssen eingestellt werden, um den Stil so aussehen zu lassen, wie Sie wollen – Gagravarr

6

Sie können folgende Methode verwenden, damit wird Ihr Problem möglicherweise gelöst.

public static void setCellColorAndFontColor(XSSFCell cell, IndexedColors FGcolor, IndexedColors FontColor){ 
    XSSFWorkbook wb = cell.getRow().getSheet().getWorkbook(); 
    CellStyle style = wb.createCellStyle(); 
    XSSFFont font = wb.createFont(); 
    font.setBold(true); 
    font.setColor(FontColor.getIndex()); 
    style.setFont(font); 
    style.setFillForegroundColor(FGcolor.getIndex()); 
    style.setFillPattern(CellStyle.SOLID_FOREGROUND); 
    cell.setCellStyle(style); 
} 

Wenn Sie diese Methode aufrufen die Art und Weise sollte wie sein

setCellColorAndFontColor(cell, IndexedColors.BLACK, IndexedColors.WHITE); 

fett & weißer Schrift Textfarbe mit schwarzen Zelle Hintergrundfarbe in dem Blatt schaffen.

+3

Das wird jedoch einen Stil pro Zelle erstellen, was Sie nicht tun sollten, da Sie schnell auslaufen werden - Stile sind Arbeitsbuch-Bereich! – Gagravarr

Verwandte Themen