Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用PropertyTemplate边框时,ApachePOI使用黑色填充XSSF单元格,而不是所需的自定义颜色_Java_Excel_Apache Poi - Fatal编程技术网

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

Java 应用PropertyTemplate边框时,ApachePOI使用黑色填充XSSF单元格,而不是所需的自定义颜色,java,excel,apache-poi,Java,Excel,Apache Poi,我正在编写一个程序,该程序应该使用PropertyTemplate创建一个Excel电子表格,其中包含一些填充为橙色的单元格、给定的文本和给定的边框。我已经成功地在HSSF中编写了这样做的代码,但我现在正在处理XSSF,无法让它工作 发生的情况是,单元格中填充了正确的橙色,文本也正确地进入单元格,但应用PropertyTemplate会使橙色单元格变为黑色。有人知道怎么解决这个问题吗 这是我的代码 XSSFCellStyle orangeFillStyle = wb.createCellStyl

我正在编写一个程序,该程序应该使用
PropertyTemplate
创建一个Excel电子表格,其中包含一些填充为橙色的单元格、给定的文本和给定的边框。我已经成功地在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
(边框)代码:

如果我注释掉
borderTemplate.applyBorders(表单)行,填充颜色看起来很好。显然,如果我这样做的话,我的工作表上没有任何边框。就像我不能同时拥有自定义填充颜色和边框一样。有没有人知道为什么会发生这种情况,或者有什么方法可以避免这种情况

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

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

看来这是ApachePOI的一个bug。我注意到有人不久前在他们的bug追踪器中发布了关于它的信息,它仍然存在于3.16版中


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

这不是一个bug,而是不完整
PropertyTemplate
以及
CellUtil
仅基于
ss.usermodel
级别,而不基于
xssf.usermodel
级别。但是不知道有关
setFillForegroundColor(颜色)
的信息。它只知道
setFillForegroundColor(短bg)
。所以直到现在,
ss.usermodel
level还不能将
Color
设置为填充前景色。只能使用
短的
(颜色索引)。
XSSFCellStyle orangeFillStyle = wb.createCellStyle();
orangeFillStyle.setFillForegroundColor(IndexedColors.ORANGE.getIndex());
orangeFillStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);