This looks like a bug in the CellUtil.get/setFormatProperties methods,
which assumes the fill foreground color is an indexed color (short
data type), and falls back to IndexedColors.AUTOMATIC (black) if not
indexed.

Could you open a bug at https://bz.apache.org/bugzilla with your test
case, quote the sentence above, and a link to
http://apache-poi.1045710.n5.nabble.com/XSSF-Problem-with-CellUtil-and-custom-RGB-background-color-td5722925.html?

XSSFCellStyle.java:
    
https://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java?revision=1737895&view=markup#l455
    @Override
    public short getFillForegroundColor() {
        XSSFColor clr = getFillForegroundXSSFColor();
        return clr == null ? IndexedColors.AUTOMATIC.getIndex() :
clr.getIndexed();
    }

    @Override
    public XSSFColor getFillForegroundColorColor() {
       return getFillForegroundXSSFColor();
    }

    
https://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java?revision=1737895&view=markup#l1027
    @Override
    public void setFillForegroundColor(short fg) {
        XSSFColor clr = new XSSFColor();
        clr.setIndexed(fg);
        setFillForegroundColor(clr);
    }

    public void setFillForegroundColor(XSSFColor color) {
        CTFill ct = getCTFill();

        CTPatternFill ptrn = ct.getPatternFill();
        if(color == null) {
            if(ptrn != null && ptrn.isSetFgColor()) ptrn.unsetFgColor();
        } else {
            if(ptrn == null) ptrn = ct.addNewPatternFill();
            ptrn.setFgColor(color.getCTColor());
        }

        addFill(ct);
    }

On Mon, May 2, 2016 at 8:15 AM, Anders Åberg <[email protected]> wrote:
> I'm using 3.14.
>
> -Anders
>
> On 2 May 2016 at 16:35, Javen O'Neal <[email protected]> wrote:
>
>> What version of POI are you using?
>> On May 2, 2016 03:25, "Anders Åberg" <[email protected]> wrote:
>>
>> > Hi guys
>> > I am trying to set RGB background colors on cells and in addition set
>> > borders on regions using RegionUtil. When doing this, all the cells with
>> > borders end up completely black.
>> >
>> > It seems that using XSSFColor on XSSFCellStyle causes problems with the
>> way
>> > CellUtil.setCellStyleProperties works. CellUtil is used by RegionUtil.
>> >
>> > This is a minimal test to reproduce the problem:
>> >
>> >     XSSFWorkbook workbook = new XSSFWorkbook();
>> >     XSSFSheet sheet = workbook.createSheet();
>> >
>> >     Cell cell = CellUtil.getCell(CellUtil.getRow(0, sheet), 0);
>> >
>> >     XSSFColor color = new XSSFColor(Color.RED);
>> >     XSSFCellStyle style = workbook.createCellStyle();
>> >     style.setFillForegroundColor(color);
>> >     style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
>> >     cell.setCellStyle(style);
>> >
>> >     // Everything is fine at this point, cell is red
>> >
>> >     Map<String, Object> properties = new HashMap<>();
>> >     properties.put(CellUtil.BORDER_BOTTOM, CellStyle.BORDER_THIN);
>> >     CellUtil.setCellStyleProperties(cell, properties);
>> >
>> >     // Now the cell is all black
>> >
>> > Does anybody know if this is supposed to work? Any suggestions on
>> > workarounds? It is of course possible to avoid the CellUtil methods, but
>> > they contain some clever logic to avoid creating new styles for every
>> cell
>> > and eventually hit a threshold in Excel.
>> >
>> > All help will be very appreciated!
>> >
>> > Thanks, Anders
>> >
>>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to