在Apache POI中为XSSFWorkbook设置自定义字体颜色

12

我在使用Apache POI中的XSSFWorkbook设置自定义字体颜色时遇到了一些问题。 当我执行:

    yellow = workbook.createCellStyle();
    Font whiteFont = workbook.createFont();
    whiteFont.setColor(new XSSFColor(new Color(255, 255, 255)).getIndexed());
    yellow.setFillForegroundColor(new XSSFColor(yellowRGB));
    yellow.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
    yellow.setFont(whiteFont);

字体仍然是黑色的,虽然我不确定我做错了什么。

2个回答

11
你可以使用whiteFont.setColor(new XSSFColor(new Color(255,255,255)));来设置字体颜色为白色。
然而,Apache POI存在一个错误,导致黑白颜色相反。看起来他们在XSSFColor.java中放置了一个“修复”(查看XSSFColor.correctRGB()),以纠正Excel中的问题。很可能Excel已经被修复,但Apache POI没有更新。
相反,你可以使用:whiteFont.setColor(HSSFColor.WHITE.index) 或者whiteFont.setColor(IndexedColors.WHITE.index);(已过时)。
或者如果你使用whiteFont.setColor(new XSSFColor(new Color(255,255,254)));,它会非常接近白色。

但问题是我必须使用getIndexed(),因为Font.setColor(short)使用short作为参数。此外,该方法根本不起作用,因为我认为它可能只适用于白色,但当我执行whiteFont.setColor(new XSSFColor(new Color(234, 17, 156)).getIndexed());时,它仍然保持黑色。 - silverAndroid
getIndexed() 函数存在问题,很可能是 CTColor 出了问题,因为 XSSFColor 在底层使用的就是 CTColor。请问您使用的是哪个版本的 POI?您仍然可以使用 whiteFont.setColor(HSSFColor.WHITE.index) 或者 whiteFont.setColor(IndexedColors.WHITE.index); - Phill Treddenick
你的工作簿是什么类型?你正在使用的Font类的完整类型是什么?(属于哪个包?) - Phill Treddenick
1
XSSFWorkbook.createFont() 返回一个 XSSFFont。你应该使用它。 - Phill Treddenick
我正在使用 POI v3.12,工作簿的类型是 .xlsx 文件,因此我正在使用 XSSFWorkbook 类,并且在字体类中我一直在使用 org.apache.poi.ss.usermodel.Font 直到你告诉我要切换到 XSSFFont (org.apache.poi.xssf.usermodel.XSSFFont)。然而,我已经切换到 XSSFFont 但它仍然不起作用。 - silverAndroid
1
如果您使用XSSFFont,则无需使用getIndexed()。使用XSSFFont,您现在可以使用我在答案中描述的任何解决方案。 - Phill Treddenick

8
XSSFFont font = (XSSFFont) wb.createFont();
font.setColor(new XSSFColor( Color.decode("#7CFC00")));

1
为了帮助 OP 解决当前的问题,可以在回答中添加一些解释说明。 - ρяσѕρєя K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接