git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1072082 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_8_BETA1
<changes> | <changes> | ||||
<release version="3.8-beta1" date="2010-??-??"> | <release version="3.8-beta1" date="2010-??-??"> | ||||
<action dev="poi-developers" type="fix">50786 - Fix XSSFColor to fetch the RGB values of old-style indexed colours</action> | |||||
<action dev="poi-developers" type="fix">50299 - Fix XSSFColor fetching of white and black background themes</action> | <action dev="poi-developers" type="fix">50299 - Fix XSSFColor fetching of white and black background themes</action> | ||||
<action dev="poi-developers" type="fix">50795 - Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another</action> | <action dev="poi-developers" type="fix">50795 - Avoid NPE from xmlbeans when moving XSSF Comments from one cell to another</action> | ||||
<action dev="poi-developers" type="fix">46664 - When creating HSSF Print Areas, ensure the named range is reference based not value based</action> | <action dev="poi-developers" type="fix">46664 - When creating HSSF Print Areas, ensure the named range is reference based not value based</action> |
package org.apache.poi.xssf.usermodel; | package org.apache.poi.xssf.usermodel; | ||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor; | import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor; | ||||
import org.apache.poi.hssf.util.HSSFColor; | |||||
import org.apache.poi.ss.usermodel.Color; | import org.apache.poi.ss.usermodel.Color; | ||||
import org.apache.poi.util.Internal; | import org.apache.poi.util.Internal; | ||||
* Standard Alpha Red Green Blue ctColor value (ARGB). | * Standard Alpha Red Green Blue ctColor value (ARGB). | ||||
*/ | */ | ||||
public byte[] getRgb() { | public byte[] getRgb() { | ||||
return ctColor.getRgb(); | |||||
if(ctColor.isSetIndexed() && ctColor.getIndexed() > 0) { | |||||
HSSFColor indexed = HSSFColor.getIndexHash().get((int)ctColor.getIndexed()); | |||||
if(indexed != null) { | |||||
// Convert it to ARGB form | |||||
byte[] rgb = new byte[4]; | |||||
rgb[0] = 0; | |||||
rgb[1] = (byte)indexed.getTriplet()[0]; | |||||
rgb[2] = (byte)indexed.getTriplet()[1]; | |||||
rgb[3] = (byte)indexed.getTriplet()[2]; | |||||
return rgb; | |||||
} else { | |||||
// Your indexed value isn't a standard one, sorry... | |||||
return null; | |||||
} | |||||
} | |||||
return ctColor.getRgb(); | |||||
} | } | ||||
/** | /** | ||||
/** | /** | ||||
* Return the ARGB value in hex format, eg FF00FF00. | * Return the ARGB value in hex format, eg FF00FF00. | ||||
* For indexed colours, returns null. | |||||
* Works for both regular and indexed colours. | |||||
*/ | */ | ||||
public String getARGBHex() { | public String getARGBHex() { | ||||
StringBuffer sb = new StringBuffer(); | StringBuffer sb = new StringBuffer(); |
assertEquals(64, s.getRow(1).getCell(8).getCellStyle().getFillBackgroundColor()); | assertEquals(64, s.getRow(1).getCell(8).getCellStyle().getFillBackgroundColor()); | ||||
} | } | ||||
/** | |||||
* Excel .xls style indexed colours in a .xlsx file | |||||
*/ | |||||
public void test50786() throws Exception { | |||||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50786-indexed_colours.xlsx"); | |||||
XSSFSheet s = wb.getSheetAt(0); | |||||
XSSFRow r = s.getRow(2); | |||||
// Check we have the right cell | |||||
XSSFCell c = r.getCell(1); | |||||
assertEquals("test\u00a0", c.getRichStringCellValue().getString()); | |||||
// It should be light green | |||||
XSSFCellStyle cs = c.getCellStyle(); | |||||
assertEquals(42, cs.getFillForegroundColor()); | |||||
assertEquals(42, cs.getFillForegroundColorColor().getIndexed()); | |||||
assertNotNull(cs.getFillForegroundColorColor().getRgb()); | |||||
assertEquals("00CCFFCC", cs.getFillForegroundColorColor().getARGBHex()); | |||||
} | |||||
/** | /** | ||||
* Fonts where their colours come from the theme rather | * Fonts where their colours come from the theme rather | ||||
* then being set explicitly still should allow the | * then being set explicitly still should allow the |