git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1072082 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_8_BETA1
@@ -34,6 +34,7 @@ | |||
<changes> | |||
<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">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> |
@@ -17,6 +17,7 @@ | |||
package org.apache.poi.xssf.usermodel; | |||
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.util.Internal; | |||
@@ -83,7 +84,22 @@ public class XSSFColor implements Color { | |||
* Standard Alpha Red Green Blue ctColor value (ARGB). | |||
*/ | |||
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(); | |||
} | |||
/** | |||
@@ -99,7 +115,7 @@ public class XSSFColor implements Color { | |||
/** | |||
* Return the ARGB value in hex format, eg FF00FF00. | |||
* For indexed colours, returns null. | |||
* Works for both regular and indexed colours. | |||
*/ | |||
public String getARGBHex() { | |||
StringBuffer sb = new StringBuffer(); |
@@ -704,6 +704,26 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { | |||
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 | |||
* then being set explicitly still should allow the |