我们正在使用Grails excel-export plugin,它使用了apache-poi。
我们正在尝试设置单元格(或行)的背景颜色(以及后来的字体)。
我们试过这个:
def rgb = [50,50,50] as byte[]
XSSFColor colour = new XSSFColor(rgb)
headers.eachWithIndex() {item, i ->
xlsxExporter.putCellValue(row, i, item.value.toString())
def style = xlsxExporter.getCellAt(row, i).getCellStyle()
xlsxExporter.getCellAt(row, i).setCellStyle(style.setFillBackgroundColor(colour))
};
但没有任何改变。我们尝试将setCellStyle放在plutCellValue之前,但这会导致空指针异常。
我们无法使用模板,因为我们正在开发一个插件,不幸的是,只有应用程序可以在WEB-INF中拥有可访问的文件,而不是插件。
- 更新1
试过这个:
def style = xlsxExporter.getCellAt(row, i).getCellStyle()
style.setFillBackgroundColor(colour)
style.setFillPattern(CellStyle.ALIGN_FILL)
xlsxExporter.getCellAt(row, i).setCellStyle(style)
没有帮助。
- 更新2
尝试使用模板xlsx。在模板中,我将整行更改为具有背景颜色。结果输出具有写入的数据没有背景的所有单元格,剩余的单元格具有背景。即如果你写任何数据,它会覆盖模板样式,这与文档说的相反。我把它作为插件网站的一个bug提出来。
// convert the headers into a list of strings for the exporter.
headers = response.rows[0].keySet()
List<String> headersList = []
headers.eachWithIndex() { item, i ->
headersList.add(item.value.toString())
}
// copy the raw row data into a list of lists for Exporter
def exports = []
response.rows.each {
exports << it
}
xlsxExporter = new WebXlsxExporter(servletContext.getRealPath("/reporting/report_template.xlsx")).with {
fillHeader(headersList)
add(exports, headersList)
save(outputStream)
}
答案 0 :(得分:1)
而不是:
style.setFillBackgroundColor(colour)
试试这个:
style.setFillForegroundColor(color)
style.setFillPattern(style.SOLID_FOREGROUND)
检查是否有帮助