2012-08-30 3 views
0

POI 이벤트로 매우 큰 Excel을 가져옵니다. 나는 모든 내용을 가지고 있지만 셀 배경색은 가지고 있지 않다!poi 이벤트에서 셀 배경색 가져 오기

(here과 같이) ExtendedFormatRecords를 시도했지만 행 번호와 열 번호 정보가있는 이전 셀을 식별 할 수 없습니다!

필자의 경우 NumberRecords의 색상이 필요합니다!

여기에 내가 시도하는 방법은 다음과 같습니다

switch (record.getSid()) { 
    case BOFRecord.sid: 
     break; 
    case BoundSheetRecord.sid: 
     BoundSheetRecord bsr = (BoundSheetRecord) record; 
     System.out.println("New sheet named: " + bsr.getSheetname()); 
     break; 
    case RowRecord.sid: 
     break; 
    case NumberRecord.sid: // Contains a numeric cell value 
     NumberRecord numrec = (NumberRecord) record; 
     row = numrec.getRow(); 
     col = numrec.getColumn(); 
     //Do something 
     break; 
    case ExtendedFormatRecord.sid: 
     ExtendedFormatRecord efr = (ExtendedFormatRecord) record; 
     if (previousSid == NumberRecord.sid) { 
      // row = previousRecord.getRow(); 
      // col = previousRecord.getColumn(); 
      // System.out.println("row: " + row + " column: " + col); 
      System.out.println("ExtendedFormat "+efr.getFillForeground() + ""); 
     } else { 
      System.out.println("ops! not that"); 
     } 
     break; 
     //other cases 
     ... 
    }//end switch 
    previousSid = record.getSid(); 
    if (previousRecord != record) { 
     previousRecord = null; 
    } 

사람이 좀 도와 줄래!?

감사합니다.

+0

http://stackoverflow.com/a/11981672/1211000 – swamy

+0

@swamy [POI 이벤트 API] (http://poi.apache.org/spreadsheet/how- to.html # event_api) CellStyle에 대한 액세스 권한을 부여하지 않습니다. – licabl

답변

0

세부 사항이 너무 많이 나오기 전에 살펴 봐야 할 코드가 두 가지 있다고 생각합니다. 첫 번째는 Apache POI의 일부이며, EventUserModel - FormatTrackingHSSFListener의 일부로 Excel 파일을 처리 할 때 형식 및 스타일 추적을 처리합니다. 두 번째로, Apache Tika의 일부는 이벤트 처리에서 셀의 포맷을 즉석에서 수행하는 예제입니다. - ExcelExtractor

원하는 작업을 수행 할 수 있어야합니다. 작업. 다행히도 Excel의 서식 및 스타일 정보는 시트 정보의 일부가 아닌 통합 문서 정보의 일부이므로 먼저옵니다. 당신이해야 할 일은 처음 도달했을 때 그 레코드를 캐쉬하기 위해서입니다.

둘째, POI UserModel 코드를 살펴보고 색상 및 서식을 처리하는 레코드와 실제로 작동하는 방법을 확인해야합니다. 클래스를 사용할 수는 없지만 동일한 클래스를 구현하기 위해 자신의 클래스에서 코드의 일부 핵심 스 니펫을 빌릴 수 있습니다.

FormatTrackingHSSFListener를 사용하면 ExtendedFormatRecords를 사용할 수 있고, 각 셀의 레코드를 조회 할 수 있습니다. XFR에는 모든 종류의 색상 관련 세부 정보가 있습니다. 채우기 전경 및 배경색, 테두리 및 글꼴이 있습니다. 다음으로 PaletteRecord를 가져 와서 보관하고 UserModel HSSFPalette 클래스로 래핑하십시오. 그런 다음이를 사용하여 XFR의 색인을 기반으로 색상을 얻을 수 있습니다. 또한 FontRecords를 캡쳐해서 XFR의 인덱스에서 볼 수 있고 FontRecord에서 컬러 인덱스를 얻을 수 있습니다. HSSFPalette에서이를 찾아 보면 끝났습니다!

마지막으로 작동 시키면 Apache POI의 기능을 향상시켜 다음 사람을 도우십시오.

+0

대단히 감사합니다! 그것은 효과가 있었다. 이 트릭은 ExtendedFormatRecord가 통합 문서의 일부이며 후자의 셀에 연결하는 방법을 이해하는 것이 었습니다. HSSFPalete 생성자에 액세스 할 수 없어서 다른 이름 (ExcelPalette)을 사용하지만 동일한 내용으로 클래스를 다시 만들었습니다. – licabl

+0

다른 사람이 필요하면 이전 코드를 다음으로 변경했습니다. 'case PaletteRecord.sid : palette = new ExcelPalette ((PaletteRecord) record); case ExtendedFormatRecord.sid : ExtendedFormatRecord xfr = (ExtendedFormatRecord) record; _xfRecords.add (xfr); 휴식; case NumberRecord.sid : // 숫자 셀 값 포함 NumberRecord numrec = (NumberRecord) record; ExtendedFormatRecord xfr = _xfRecords.get (numrec.getXFIndex()); if (xfr! = null) {\t HSSFColor color = palette.getColor (xfr.getFillForeground()); if (color! = null) 짧은 [] rgb = color.getTriplet(); \t ...' – licabl

관련 문제