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

2023-12-05

我正在编写一个程序,该程序应该制作一个 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(边界)代码:

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 的一个错误。我注意到不久前有人在他们的错误跟踪器中发布了有关它的信息,并且它仍然存在于 3.16 版本中。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐