2013-08-07 4 views
11

POI를 사용하는 경우 Excel 문서의 셀 및 글꼴에는 항상 rgb 값을 반환하지는 않는 색상 정보가 포함되어 있으며 인덱스 값만 제공합니다. 색인 된 값은 색상을 얻기 위해 무언가에 대해 조회해야합니다. HSSFWorkbook (XLS)에서 표를 얻기 위해 사용할 수에 방법이있다 :XSSFWorkbook의 색상 표에 대한 액세스

InputStream in = new FileInputStream("sheet.xls"); 
HSSFWorkbook wb = new HSSFWorkbook(in); 
wb.getCustomPalette(); 

이 그런 방법은 없다 실제로 나는 관련 클래스의 아무 곳이나 더 팔레트 정보를 찾을 수있는 XSSFWorkbook (XLSX)에 액세스 . XSSFont 및 Cell에서 색인 값을 가져올 수 있지만 색상 "이름"을 너무 많이 얻는 유일한 방법은 IndexedColors 열거와 대조하는 것입니다. 이것은 나를 원래의 동일한 문제로 되돌립니다. 나는 여전히 사용할 rgb 값이 없습니다.

InputStream in = new FileInputStream("sheet.xlsx"); 
XSSFWorkbook wb = new XSSFWorkbook (in); 
wb.getCustomPalette(); <-- fail! 

그래서처럼 CellStyle의 방법으로 XSSFColor을 얻고있다 :

CellStyle style = cell.getCellStyle(); 
XSSFColor color = style.getFillBackgroundColorColor(); 

는 IndexedColors를 통해 색상 이름을 얻으려면 :

for (IndexedColors c : IndexedColors.values()) { if (c.index == indexColor){ System.out.println("Color: " + c.name()); } } 

비슷한 질문 : How do I get the (Java Apache POI HSSF) Background Color for a given cell?

참조 : http://poi.apache.org/spreadsheet/quick-guide.html#CustomColors

업데이트 1 : 나는 마지막으로 작동하는 것을 발견했습니다. 이 XSSFColor 메서드는 ARGB 16 진 코드를 반환하며 RGB 값 (분명히)을 결정할 수 있습니다. 나는 이것이 동일한 문제를 가진 사람에게 x 시간을 절약하는 데 도움이되기를 바랍니다.

((XSSFColor) color).getARGBHex()) 

업데이트 2 : 내 실망스런 기색, 나는 어떤 세포가 ARGBHex 데이터가 포함 된 배경 XSSFColor을 반환하지 않는 것으로 나타났습니다. 이것을위한 해결 방법을 찾고 있습니다.

답변

8

wb.getStylesSource()을 사용하면 CellStyle 개체를 모두 얻을 수있는 StylesTable을 얻을 수 있습니다. XSSFCellStyle API에는 색상 개체를 가져 오는 데 필요한 여러 가지 방법이 있습니다 (예 : XSSFColor). XSSFCellStyle API는 해당 스타일의 모든 글꼴 (예 : XSSFFont)에 액세스 할 수 있습니다. XSSFFont에서 특정 글꼴에 대해 XSSFColor 개체를 다시 가져올 수 있습니다.

XSSFColor에 액세스하면 getRGB()을 호출하면 RGB 값의 바이트 배열이 반환됩니다.

+0

getIndexed()에 null이 아닌 값만 제공하는 XSSFColor를 반환하는 CellStyle이 있습니다. 이것이 팔레트 조회가 필요한 이유입니다. 인덱스 값은 값을 사용할 값이없는 것을 의미합니다. –

1

당신이 찾고있는 것을 정확히 얻을 수는 없습니다. 동일한 XSSF 버전의 HSSFPalette가 없습니다. HSSFWorkbook에는 작업 할 수있는 색의 양이 매우 제한되어 있기 때문에 필요하지 않습니다. 제공하신 link에 제공된 안내가 가장 가까운 것입니다. 만약 내가 XSSFColor 객체를 가지고 있다면 getRGB()의 반환이 의미하는 색상을 어떻게 알 수 있는지 묻는다면, 항상 RGB 값을 입력하고 색상을 볼 수있는 this 웹 사이트를 참조 할 수 있습니다. 색상 이름을 찾고 있습니다. 기본적으로 색상에 대한 알려진 RGB 값을 저장하고 리턴 된 RGB에 가장 가까운 것을 볼 수있는 고유 한 유틸리티를 만들어야합니다. 그게 내가 사람을 만날 수있는 최선의 방법인데, 나는이 기능을 당신에게 제공 할 수있는 어떤 것을 모르고있다.

+0

팔레트에서 색상을 찾는 방법이 없다면 XSSFColor가 rgb를 반환하지 않는 이유는 무엇입니까? 링크는 생성을 위해 색상을 설정하는 방법을 보여 주며, 기존 xlsx를 읽습니다. –

1

Excel은 일반 셀 *의 단색 채우기 패턴에 대한 전경과 배경의 의미를 뒤집습니다.따라서 솔리드 패턴 유형의 셀에는 getFillForegroundColorColor() 메서드를 사용해야합니다.

또한 이전 질문으로 돌아 가면 범위가 0..63이므로 64는 유효한 색상 색인이 아닙니다. 색인 (64)은 셀의 기본 전경색을 나타내는 데 사용됩니다.

(*) 조건부 형식 셀에서는이 작업을 수행하지 않습니다 !!

+0

Null과 빈 열을 허용하고 있기 때문에 코드를 WHITE 대신 64로 바꿨습니다. 당신이 언급 한이 칼럼 컬러 교환을 점검 할 것입니다. –

관련 문제