2012-01-19 4 views
1

한 HSSF 통합 문서를 다른 템플릿 용 템플릿으로 사용하고 있습니다. 그것이 어떻게 작동하는지 알고 계시 겠지만,이 글을 읽는다면 통합 문서 1에서 셀을 가져 와서 스타일을 통합 문서 2의 CellStyle로 설정할 수는 없습니다.이 방법은 두 번째 클래스에서 cloneStyle 스타일.복제 된 HSSFCellStyle이 복제 된 스타일과 같지 않은 이유는 무엇입니까?

그러나 워크 시트에는 최대 4000 개의 스타일이 있으므로 무제한으로 복제 할 필요가 없습니다. 따라서 복제 할 스타일이 이미 내 통합 문서에있는 스타일과 같은지 확인하려고합니다. 그럴 경우 이미 존재하는 스타일을 사용합니다. 그렇지 않은 경우 템플릿 통합 문서에서 스타일을 복제합니다.

아래 정의 된 equals 메서드를 사용하고 있는데 스타일에서 가져온 통합 문서를 신경 쓰지 않는 것 같습니다.

http://www.java2s.com/Open-Source/Java-Document/Collaboration/poi-3.6/org/apache/poi/hssf/usermodel/HSSFCellStyle.java.htm#equalsObject

그러나,이 모든 말에 나는 확인 :

 
     if (!getCellStyle().equals(cell.getCellStyle())) { 
      System.out.println("Not equal to cloned style!"); 
     } else { 
      System.out.println("Equal to cloned style."); 
     } 

이 ... 출력은 스타일이 동일하지 있음을 나타냅니다.

왜 이런가요?

참고 : 두 개체가 모두 instanceof를 사용하는 HSSFCellStyle 유형인지 확인합니다.

답변

3

나는 equals 메서드를 살펴 보았습니다. 모든 것이 동일하면 _index 변수가 검사됩니다. 인덱스는 ExtendedFormat 객체 (아래의 Javadoc) 목록의 위치에 따라 달라집니다. HSSFCellStyle에 위치 정보가 포함되어 있고 ExtendedFormatRecord의 래퍼 역할을하는 경우 ExtendedFormatRecord 객체를 다시 사용하여 공간을 절약 할 수 있습니다.

/** 
     * get the index within the HSSFWorkbook (sequence within the collection of ExtnededFormat objects) 
     * @return unique index number of the underlying record this style represents (probably you don't care 
     * unless you're comparing which one is which) 
     */ 
     public short getIndex() { 
      return _index; 
     } 
+0

감사합니다. 왜 내가 그런 생각을하지 않았는지 모르겠다. 아마도 equals()가 통합 문서 특정 평등보다는 스타일 유사성을 검사하려고한다는 생각 때문에 맹목적이었을 것입니다. –

+0

이것은이 질문에 대답하지만 다른 것을 올립니다 ... 이것은 스타일 유사성을 감지하는 방법입니다. DataFormatString은 분명히 모든 것이 아닙니다. –

+1

인덱스를 다르게하여 동일한 통합 문서에서 두 가지 스타일을 렌더링 할 수 있습니다. 이것들은 같지 않을 것입니다. 이것이 equals 메서드가 동작하는 방식입니다. – Gagravarr

관련 문제