diff --git a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java index c43483912aa..c8a99c63074 100644 --- a/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java +++ b/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTableCell.java @@ -304,7 +304,10 @@ public void setBorderColor(BorderEdge edge, Color color) { throw new IllegalArgumentException("Colors need to be specified."); } - CTLineProperties ln = setBorderDefaults(edge); + final CTLineProperties ln = setBorderDefaults(edge); + if (ln.isSetSolidFill()) { + ln.unsetSolidFill(); + } CTSolidColorFillProperties fill = ln.addNewSolidFill(); XSLFColor c = new XSLFColor(fill, getSheet().getTheme(), fill.getSchemeClr(), getSheet()); c.setColor(color); diff --git a/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFTable.java b/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFTable.java index 9529309a2a6..c76849e46fb 100644 --- a/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFTable.java +++ b/poi-ooxml/src/test/java/org/apache/poi/xslf/usermodel/TestXSLFTable.java @@ -280,6 +280,25 @@ void testCreate() throws IOException { ppt2.close(); } + @Test + void testBorderColorOverwrite() throws IOException { + XMLSlideShow ppt = new XMLSlideShow(); + XSLFSlide slide = ppt.createSlide(); + XSLFTable tbl = slide.createTable(); + XSLFTableRow row = tbl.addRow(); + XSLFTableCell cell = row.addCell(); + + for (BorderEdge edge : BorderEdge.values()) { + cell.setBorderColor(edge, Color.yellow); + assertEquals(Color.yellow, cell.getBorderColor(edge)); + // additional calls to setBorderColor do not add multiple solidFill elements + cell.setBorderColor(edge, Color.red); + assertEquals(Color.red, cell.getBorderColor(edge)); + } + + ppt.close(); + } + @Test void removeTable() throws IOException { XMLSlideShow ss = XSLFTestDataSamples.openSampleDocument("shapes.pptx");