2012-03-13 2 views
3

많은 소스에 따르면 과 같은 많은 소스에 따르면 POI에서 Excel 차트를 사용하는 유일한 방법은 기존 차트가있는 Excel 파일을 템플릿으로 사용하고 차트에서 사용하는 소스 셀을 수정하는 것입니다. 그리고 그것은 훌륭하게 작동합니다.Apache POI : 차트가 포함 된 워크 시트의 복제

문제는 같은 차트이지만 다른 (동적으로 생성 된) 데이터를 가진 워크 시트를 하나만 포함하고 여러 개 (컴파일 타임에 얼마나 많은지) 알 필요가 있다는 것입니다. cloneSheet(sheetNumber)을 사용하면 템플릿 워크 시트를 복제 할 수 있습니다. 하지만 차트가 복제 될 때까지만 작동합니다.

내가지고있어 차트와 시트를 복제하려고

:

Exception in thread "main" java.lang.RuntimeException: The class org.apache.poi.hssf.record.chart.ChartFRTInfoRecord needs to define a clone method 
    at org.apache.poi.hssf.record.Record.clone(Record.java:71) 
    at org.apache.poi.hssf.model.InternalSheet.cloneSheet(InternalSheet.java:388) 
    at org.apache.poi.hssf.usermodel.HSSFSheet.cloneSheet(HSSFSheet.java:125) 
    at org.apache.poi.hssf.usermodel.HSSFWorkbook.cloneSheet(HSSFWorkbook.java:652) 

UPDATE :

내가 XSSF로 전환, 지금 적어도 더 런타임 예외가 없다. 시트 데이터는 복제되었지만 차트는 복제되지 않습니다 (복제 된 시트에는 존재하지 않음).

차트가있는 워크 시트를 복제하는 데 성공한 사람이 있습니까? 아니면 우리가 가진 문제를 해결하는 방법, 즉 POI로 동적 워크 시트 수에 대한 Excel 차트를 생성하는 방법에 대한 아이디어가 있습니까? 나는 매우 복잡 해결 방법으로 결국

+0

사용중인 POI 버전은 무엇입니까? – Gagravarr

+0

@Gagravarr 3.7을 사용하고 있습니다. 또한 3.8 베타 5로 잠시 전환하여 3.8에서 수정되었는지 확인했지만 그렇지 않습니다. –

+0

여전히 3.17에서 작동하지 않습니다. – jontro

답변

6

:

  1. 내가 매크로 Excel에서 템플릿 차트 (예 : 1000) 시트의 큰 번호를 생성
  2. 제가 아파치와 필요에 따라 나는 많은 시트에 데이터를 입력 POI (차트에서 사용하는 명명 된 범위로 조작)
  3. 내가 필요로하는 이름으로 Apache POI를 필요한만큼 시트 이름을 바꿉니다. 따라서 XSSF가 명명 된 범위를 업데이트하지 않기 때문에 HSSF로 제한됩니다. 시트 이름 바꾸기 후 Excel에서 참조 :-()
  4. 내가 삭제 th e 아파치 POI로 시트의 나머지 부분

이 개념적으로 단순하고 일반적인 유스 케이스를 구현하는 것은 심각한 노력이었다. 차트로 Excel로 내보내기) 적어도 가능하고 꽤 잘 작동합니다.