POI XSSFCellStyle与PropertyTemplate绘制边界,当设置单元格setFillForegroundColor和SetFillPattern时,将单元格完全变为黑色

时间:2017-06-21 15:35:24

标签: excel apache-poi

我发现以下问题类似但不完全相同:

Setting foreground color for HSSFCellStyle is always coming out black

所以我正在为我的表格的标题创建一个XSSFCellStyle,并为它们提供一个Foreground颜色,其中包含以下内容:

    wb = new XSSFWorkbook();
    headerStyle = wb.createCellStyle();
    XSSFColor headerBackgroundColor = new XSSFColor(new java.awt.Color(187,187,187));
    headerStyle.setFillForegroundColor( headerBackgroundColor);
    headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

然后我使用setCellStyle将它应用于单元格。

在我尝试在那些/那些单元格周围添加边框之前,一切正常。

我使用了propertyTemplate.drawBorders(range,borderType,color,extent);

    CellRangeAddress range = new CellRangeAddress(startRow, endRow, startColumn, endColumn);
    BorderStyle borderType = BorderStyle.MEDIUM;
    short color = IndexedColors.BLACK.getIndex();
    BorderExtent extent = BorderExtent.ALL;
    propertyTemplate.drawBorders(range, borderType, color, extent);

当我应用它并生成我的工作表时,使用headerStyle设置样式的单元格是完全黑色的。我可以将文本颜色更改为白色,我可以看到所有数据仍然存在。

当我在headerStyle中注释掉setFillPattern时,我可以正确地看到边框,但是前景颜色是白色的,好像没有设置setFillForegroundColor(即使它是)。

我也尝试过使用setFillBackgroundColor,但我得到的结果相同。

有没有人知道我可能出错的地方或者这是一个已知(或未知?)的错误?

谢谢!

亚历

1 个答案:

答案 0 :(得分:0)

我已经将NPOI用于XSSF,这是针对.net的。您将翻译以获得Java的等效代码。

 XSSFFont myFont = (XSSFFont)workbook.CreateFont();
 myFont.FontHeightInPoints = (short)10;
 myFont.FontName = "Arial";
 myFont.Color = IndexedColors.Black.Index;
 myFont.IsBold = false;
 myFont.IsItalic = false;

XSSFCellStyle myCellStyle = (XSSFCellStyle)workbook.CreateCellStyle();
myCellStyle.FillBackgroundColor = IndexedColors.LightYellow.Index;
//myCellStyle.FillPattern = FillPattern.NoFill;
myCellStyle.FillForegroundColor = IndexedColors.LightTurquoise.Index;
myCellStyle.FillPattern = FillPattern.SolidForeground;
myCellStyle.Alignment = HorizontalAlignment.Left;
myCellStyle.VerticalAlignment = VerticalAlignment.Top;
myCellStyle.BorderBottom = BorderStyle.Thin;
myCellStyle.BorderTop = BorderStyle.Thin;
myCellStyle.BorderLeft = BorderStyle.Thin;
myCellStyle.BorderRight = BorderStyle.Thin;
myCellStyle.SetFont(defaultFont);