用不同颜色的Apache POI填充单个细胞的颜色

时间:2017-02-20 11:55:57

标签: java apache-poi export-to-excel

我使用这样的东西:我有一个CellStyle的全局变量 CellStyle cellStyle = workbook.createCellStyle()并尝试填充第4列中所有单元格的颜色。 ......

    var cell = row.createCell(colIndex)
        if (colIndex == 4) {
            cellStyle.setFillForegroundColor(HSSFColor.LIME.index);
            cellStyle.setFillPattern(HSSFCellStyle.ALIGN_CENTER);
        } else {
            cellStyle.setFillForegroundColor(HSSFColor.WHITE.index);
            cellStyle.setFillPattern(HSSFCellStyle.ALIGN_CENTER);
        }

        if (cell != null) {
            cell.setCellStyle(cellStyle);
            cell.setCellValue(value);
        }

顺便说一下,我使用HSSFWorkbook和HSSFSheet进行报告。

这样它只会填满整张纸,导致所有细胞都充满了LIME颜色!

1 个答案:

答案 0 :(得分:1)

评论是正确的CellStyle是共享的,并且创建新的单元格样式也有限制。 所以我为三种不同的样式和其中一种创建了三种方法:请原谅我的xtend代码。

 getCellStyle1(HSSFWorkbook sampleWorkBook) {
        val font = sampleWorkBook.createFont()
        font.setFontName(HSSFFont.FONT_ARIAL)
        font.setColor(IndexedColors.BLACK.index)
        font.setBoldweight(HSSFFont.COLOR_NORMAL)

        if (commonCellStyle == null)
            commonCellStyle = sampleWorkBook.createCellStyle()
        commonCellStyle.setCellBorderStyle
        commonCellStyle.setFillForegroundColor(HSSFColor.WHITE.index)
        commonCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND)
        commonCellStyle.setFont(font)
        commonCellStyle.setCellBorderStyle
        return commonCellStyle
    }

类似地,我有更多getCellStyle2和getCellStyle3,如果找到null则只创建一个,以便可以在各个列之间共享样式。