2013-07-09 3 views
7

저는 apache poi 및 XLSX 파일을 사용하고 있습니다. xssf 클래스를 사용하여 동적으로 스프레드 시트를 만듭니다. 내가 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); 

... 코드의 난 단지 일부 ... 나는 왜 작동하지 않는지 이해할 수 없다. 셀 스타일이 무시되거나 지나치게 쓰인 것처럼 보입니다 ....

실마리?

답변

4

CellStyles는 통합 문서이며 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); 
    } 
} 

만약 당신이 확실히 예상대로, 최선의 옵션을 사용하면 Excel에서 원하는 셀의 스타일을하는 것입니다 보지 않고 스타일링에 문제가있어, 파일을 저장하고 POI로 읽어 들인 후 Excel에서 작성한 셀 스타일을 검토하십시오. 때때로 Excel은 익숙해 진 이상한 일을 할 수 있으므로 수행해야 할 작업을 확인하기 위해 무엇이 필요한지 확인하십시오.

+0

나는 이미 당신을 시도해 봤지만 아무 것도 해결하지 못했습니다 ... .xlsx 모델 파일을 만들 때 힘들지만, 런타임에 사용자가 정의한 몇 가지 기준에 따라 100 % 동적 스프레드 시트를 생성합니다. ... – Medioman92

+0

또한 "IndexedColor"클래스를 사용하여 배경을 설정하면 항상 검은 색이됩니다. – Medioman92

+1

대답의 맨 아래에있는 조언을 참조하십시오 - Excel에서 원하는대로 만들고 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); 
} 

는 방법이 있어야한다.

+3

이렇게하면 셀당 하나의 스타일이 만들어지기 때문에 빨리 실행하지 않아도 안됩니다. 스타일은 통합 문서 범위입니다! – Gagravarr

관련 문제