2012-06-19 5 views
1

POI 3.8 버전을 사용 중이며 엑셀 시트 (XLS)에서 세포의 배경색을 읽으려고합니다. 이상적으로 저는이 셀을 다른 시트에 스타일로 복사하고 싶었습니다. cloneFrom (..) 메서드는 대상 시트에 올바른 색을 복사하지 않습니다.POI 독서 세포 배경색

셀의 배경색을 개별적으로 읽으려고했는데 정확한 RGB 값을 얻지 못했습니다. 올바른 RGB 값을 얻을 수 있다면 사용자 정의 팔레트를 만들고 대상 시트의 셀을 설정할 수 있습니다.

셀에서 배경색을 올바르게 읽을 수 있습니까?

나는 나에게 159/200/222의 RGB 값을 제공해야 다음

cell.getCellStyle().getFillBackgroundColor() 
cell.getCellStyle().getFillBackgroundColorColor().getTriplet() 

위의 라인을 시도하지만, 나에게 51/204/204의 잘못된 값을주고있다.

누군가가 동일한 도움을 줄 수 있습니까? 나는 가능한 모든 대답에 대해이 포럼을 이미 확인했지만 여전히 원하는 것을 얻을 수 없었다.

답변

3

문제는 HSSF는 RGB 값을 정의하기 위해 색상 팔레트 (기본적으로 색상 배열)를 사용한다는 것입니다. 따라서 배경색은 실제로 팔레트의 인덱스입니다. 다음은 셀의 배경 색의 실제 RGB 값을 얻을 수있는 몇 가지 코드입니다 : 당신의 출력 스프레드 시트에서

CellStyle style = cell.getCellStyle(); 
    short colorIdx = style.getFillForegroundColor(); 
    HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette(); 
    HSSFColor color = palette.getColor(colorIdx); 
    short [] triplet = color.getTriplet(); 
    // triplet will contain the actual rgb values 

, 당신이 팔레트에 사용자 정의 색상을 추가해야합니다. 출력 팔레트에 빈 공간이 있으면 HSSFPalette.addColor를 사용할 수 있습니다. 그렇지 않으면 HSSFPalette.setColorAtIndex를 사용하여 사용되지 않는 기존 색상을 바꿔야합니다. 일단 사용자 정의 색상을 추가하면 CellStyle.setFillBackgroundColor를 사용하여 방금 만든 사용자 정의 색상의 색인을 전달하여 셀의 배경색을 설정합니다.

HSSF (xls) 파일 대신 XSSF (xlsx) 파일을 사용할 수 있으면 컬러 팔레트로 바보짓을하지 않아도됩니다. 실제 rgb 값을 사용할 수 있습니다.

+0

코드의이 부분을 시도해 본 결과 HSSFColor.AUTOMATIC.index 값이 64이고 삼중 항은 흰색이므로 [0,0,0]은 흰색입니다. 내가 전경 색상으로 시도했을 때 나는 틀린 같은 삼중 항을 얻었다 [51,204,204]. 이것에 대한 도움은 대단히 감사하겠습니다. – lsiva

+0

게시하기 전에이 코드를 사용해 보았습니다. 내 프로필로 이동하려면 전자 메일 주소가 있고 xls 파일을 전자 메일로 보내고 배경색이 필요한 셀을 식별 할 수 있습니다. 나는 그것을 얻는 방법을 정확히 보여주는 몇 가지 코드를 작성할 것이다. –

+0

확실 할 것입니다 ... – lsiva