2013-07-09 28 views
7

私はapache poiとXLSXファイルを扱っています。私はスプレッドシートを動的に作成するためにxssfクラスを使用します。 iはforループ内のセルのスタイルを設定したいのですが、動作するようには思えない...ここに私のコードです:セルスタイルが正しく動作しない

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

...コードのこの私だけの部分... なぜ動作していないのか分かりません。 cellstyleが無視されたり上書きされるように思える....

任意の手掛かり?

答えて

4

CellStylesごとのワークブックで、Excelがファイルを持つことが許可されている番号に課すハード制限がありますので、あなたは、あなたがループの外に一度セルスタイルを作成することを確認する必要があります。

あなたのコードは、のようなものになります:あなたはスタイリングは、あなたが期待するほど見ていないとの問題を抱えている場合は、最良のオプションは、Excelでそれをしたいとセルのスタイルをある

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

を、ファイルを保存し、POIに読み込んで、Excelが書き込んだセルスタイルを確認します。場合によっては、Excelが慣れ親しんだ奇妙なことをすることもありますので、実行しなければならないことを確認してください。

+0

... – Medioman92

+0

また、 "IndexedColor"クラスを使用して背景を設定すると、常に黒く表示されます。 – Medioman92

+1

答えの一番下に私の助言を見てください - あなたが欲しいものを作成し、POIから読み返して、どのようなオプションがあなたのようにスタイルを見せるように設定する必要があります – Gagravarr

6

次の方法を使用できますが、これにより問題が解決する可能性があります。あなたは、このメソッドを呼び出しているとき

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

は、シートの黒セルの背景色で大胆&白のフォント、テキストの色を作成するよう

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

は方法がなければなりません。私はまた、約.xlsx形式のモデルファイルを作成取り払わが、私は、実行時にユーザーによって定義されたいくつかの基準に基づいて、100%動的なスプレッドシートを作成しています...すでに方法を試してみたが、何も解決しません

+3

これは、1つのセルにつき1つのスタイルを作成しますが、すぐに使い果たさないようにすべきではありません。スタイルはワークブックスコープです! – Gagravarr

関連する問題