scala利用poi给Excel添加颜色

上次利用poi导出Excel,写了一个Excel的工具类,感觉还是挺好用的。但是有一个问题,Excel的头部是白色和下面的内容的颜色是一样的。这看着怎么可以。于是想着添加一下背景色

掉坑

Excel的处理逻辑从大到小,首先创建一个工作簿(sheet),然后创建里面的行(row),在行中创建单元格(cell),然后在cell中赋值这样Excel中的值就来。

所以我认为cell对象中直接设置背景颜色的方法setcolor这个方法。然而没有。只有一个setCellStyle的方法,传入的对象XSSFCellStyle,那只能创建这个对象。注意这个对象是用XSSFWorkbook创建的。

找到这个对象之后,看一下有没有关于颜色的方法,找到两个setFillForegroundColorsetFillBackgroundColor,看到方法肯定用setFillBackgroundColor,但是万万没有想到,直接把cell中内容覆盖了。所以使用setFillForegroundColor这个方法试一下,最后成功了,然后看api中介绍,发现api中介绍:many cells are actually filled with a foreground fill。

看到这个方法用的是XSSFColor对象,那就再new一下,看一下XSSFColor的对象和方法:发现一个public XSSFColor(Color clr)构造方法,注意这里面的Color对象是java.awt.Color而不是org.apache.poi.ss.usermodel.Color,可以直接用Color.RED设置红色。我调色的时候喜欢用rgb的数值来确定颜色,于是找到XSSFColor有setRGB方法,感觉离成功不远了,下面贴一下代码供大家参考

1
2
3
4
5
6
val style = xssf.createCellStyle()
val color =new XSSFColor()
color.setRGB(Array(189.toByte,183.toByte,107.toByte))
style.setFillForegroundColor(color)
style.setFillPattern(FillPatternType.SOLID_FOREGROUND)
cell.setCellStyle(style)