在应用PropertyTemplate边框时,Apache POI使用黑色而不是所需的自定义颜色填充XSSF单元格

我正在编写一个程序,该程序应该制作一个Excel电子表格,其中包含一些填充橙色的单元格,给定文本,并使用PropertyTemplate给出边框。 我已成功编写代码在HSSF中执行此操作,但我现在正在研究XSSF并且无法使其工作。

发生的事情是细胞充满了正确的橙色,文本也正确地进入细胞,但应用PropertyTemplate会使橙色细胞变黑。 有没有人知道这方面的方法?

这是我的代码。

 XSSFCellStyle orangeFillStyle = wb.createCellStyle(); orangeFillStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 192, 0))); orangeFillStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

然后有一大堆代码/算法来确定哪些单元格填充橙色以及哪些单元格放入文本。我使用代码突出显示单元格:

 currCell.setCellStyle(orangeFillStyle); 

在工作表创建的最后是PropertyTemplate (border)代码:

 BorderStyle dividerStyle = BorderStyle.THIN; PropertyTemplate borderTemplate = new PropertyTemplate(); borderTemplate.drawBorders(new CellRangeAddress(0, 0, 0, 13), dividerStyle, BorderExtent.BOTTOM); borderTemplate.drawBorders(new CellRangeAddress(0, 0, 1, 13), dividerStyle, BorderExtent.TOP); borderTemplate.drawBorders(new CellRangeAddress(0, rowI, 1, 13), dividerStyle, BorderExtent.VERTICAL); borderTemplate.drawBorders(new CellRangeAddress(rowI, rowI, 0, 13), dividerStyle, BorderTextent.BOTTOM); borderTemplate.applyBorders(sheet); 

如果我注释掉borderTemplate.applyBorders(sheet); 线,填充颜色看起来很好。 但是,如果我这样做,显然我的表格上没有任何边框。 这就像我不能同时拥有自定义填充颜色和边框。 有谁知道为什么会发生这种情况或绕过它?

我会注意到,如果我使用IndexedColor而不是自定义颜色,那么填充和边框可以正常工作。 唯一的问题是我不喜欢任何索引颜色。 这是我用于IndexedColor的代码:

 XSSFCellStyle orangeFillStyle = wb.createCellStyle(); orangeFillStyle.setFillForegroundColor(IndexedColors.ORANGE.getIndex()); orangeFillStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); 

好吧,看起来这是Apache POI的一个错误。 我注意到有人刚才在他们的bug跟踪器中发布了它,它仍然存在于3.16版本中。

如果其他人遇到这个问题,我的解决方法是在使用我的自定义橙色填充任何单元格之前放置PropertyTemplate(边框)。 它意味着显着修改我的代码,但它现在可以工作。