2012-05-17 3 views
1

안녕하세요 모두 아파치 POI의 XSSF를 사용하여 읽기 1 xlsx 파일입니다. 내가 perticular 세포의 글꼴을 읽고 새로운 세포에 적용하면 perticular 세포가 아닌 전체 시트에 해당 글꼴을 적용하고 있습니다. 내가 원하는 예 :Apache POI 설정 셀 글꼴 및 글꼴 색상

 column1 column2  column3 
row1 ARIAL TIMES ROMAN ARIAL 

row2 TIMES ROMAN ARIAL ARIAL 

row3  ARIAL ARIAL ARIAL 

나는 원래 파일에 있던 eche 세포에서 같은 글꼴을 원한다.

내 코드

public XSSFCellStyle setFontOnCell(XSSFCellStyle cellStyle, XSSFCell cell) 
    { 
     try { 
      font = cell.getCellStyle().getFont(); 
      new_font.setFontName(font.getFontName()); 
      new_font.setBoldweight(font.getBoldweight()); 
      new_font.setFontHeight((short)font.getFontHeight()); 
      new_font.setFamily(font.getFamily()); 
      cellStyle.setFont(new_font); 
      return cellStyle; 
     } catch (Exception e) { 
      //System.out.println(e.getMessage()); 
      return cellStyle; 
     } 
    } 

답변

1

당신의 new_font 글로벌 변수가 될 것입니다, 당신은 세포로 주입 한 다음 계속 변경합니다. 각 셀은 실제로 같은 객체를 사용하는 대신 그들 모두의 자체 Font 인스턴스를 얻을 수 있도록이 setFontOneCell() 로컬해야

+0

예는 XSSFFont 클래스 –

+0

의 전역 객체는 당신에게 킬리안 Foth 지금은 작동하지만 어떻게 할 수있는 감사입니다 힙 공간 오류가 발생하기 때문에 스타일 적용 후 해당 개체를 파괴합니다. –

+1

작성중인 스프레드 시트가 안전하게 디스크에 기록 될 때까지 해당 오브젝트를 유지해야합니다. 쉬운 해결책은 명령 행 스위치 -Xmx를 사용하여 런타임 힙 메모리 크기를 늘리는 것입니다. 실제로 프로그램에 메모리를 저장하려면'Font' 객체의 * cache *를 만들어서 같은 글꼴을 사용하는 한 인스턴스를 재사용 할 수 있도록하고, 필요할 때만 새로운 객체를 만듭니다. 이전에는 나오지 않았던 새로운 글꼴. –