2013-07-09 11 views
7

sto lavorando con apache poi e file XLSX. io uso le classi xssf per creare dinamicamente un foglio di calcolo. mi piacerebbe impostare lo stile di cella in un ciclo for, ma non sembra funzionare ... ecco il mio codice:impostazione stile cella non funzionante

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); 

... questo ho solo una porzione del codice ... non riesco a capire perché non funziona. Sembra che il cellstyle sia ignorato o sovrascritto ...

qualche indizio?

risposta

4

CellStyles è una cartella di lavoro e c'è un limite rigido imposto da Excel sui numeri consentiti da un file, quindi è necessario assicurarsi di creare lo stile della cella una volta fuori dal ciclo.

Il codice dovrebbe quindi essere simile:

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); 
    } 
} 

Se hai problemi con lo stile non è alla ricerca del tutto come ci si aspetta, l'opzione migliore è per lo stile di una cella come si desidera in Excel, salva il file, leggilo nel POI e controlla lo stile di cella che Excel ha scritto. A volte, Excel può fare alcune cose strane a cui ci si deve abituare, quindi controlla cosa fa per capire cosa devi fare!

+0

ho già provato il metodo ma non risolve nulla ... ho anche pensato di creare un file di modello .xlsx, ma sto producendo un foglio di calcolo dinamico al 100% basato su alcuni criteri definiti dall'utente in fase di esecuzione ... – Medioman92

+0

Inoltre, se uso la classe "IndexedColor" per impostare uno sfondo, risulta sempre nero – Medioman92

+1

Vedere il mio consiglio in fondo alla risposta - crearlo come si desidera in excel, leggere quello indietro dal POI e risolvere quali opzioni devono essere impostate per far apparire lo stile come vuoi – Gagravarr

6

È possibile utilizzare il metodo seguente, forse questo risolverà il problema.

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); 
} 

Quando si chiama questo metodo, il modo in cui dovrebbe essere come

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

creerà grassetto colore del testo & testo bianco con il colore di sfondo della cella nera nel foglio.

+3

Tuttavia, ciò creerà uno stile per cella, cosa che non dovresti fare in quanto ti verrà rapidamente esaurito - gli stili sono con ambito di lavoro! – Gagravarr

Problemi correlati