2015-06-26 5206 views
7

我在Apache POI中为XSSFWorkbook设置自定义字体颜色时遇到了一些问题。当我这样做:在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); 

字体保持黑色,我不知道我在做什么错,但是。

回答

6

你可以做whiteFont.setColor(new XSSFColor(new Color(255,255,255)));

然而,有一个bug in 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)));这将是非常接近白色。

+0

但问题是我必须使用'getIndexed()',因为'Font.setColor(short)'使用'short'作为参数。此外,该方法根本不起作用,因为我想也许它只是为了白色,但是当我做了'whiteFont.setColor(new XSSFColor(new Color(234,17,156))。getIndexed());',它仍然保持黑色 – silverAndroid

+0

getIndexed()存在一些问题,它可能是CTColor中的问题,这是XSSFColor在底层使用的问题。你使用的是什么版本的POI?您仍然可以执行'whiteFont.setColor(HSSFColor.WHITE.index)'或'whiteFont.setColor(IndexedColors.WHITE.index);' –

+0

工作簿的类型是什么?什么是您正在使用的Font类的完整类型? (哪个包?) –

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

添加一些解释并回答这个答案如何帮助OP解决当前问题 –