如何在Grails excel-export / apache-POI插件中设置背景颜色?

时间:2015-06-04 09:55:37

标签: excel grails export apache-poi

我们正在使用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)
  }

1 个答案:

答案 0 :(得分:1)

而不是:

style.setFillBackgroundColor(colour)

试试这个:

style.setFillForegroundColor(color)
style.setFillPattern(style.SOLID_FOREGROUND)

检查是否有帮助