如何使用Apache POI 4.1.0为不同的单元格设置不同的背景颜色

拉格纳森:

我想用不同的颜色设置不同单元格的背景颜色。但是,它始终为工作表的整个列设置一种颜色。以下是我的代码段:

    for (int i = 1; i < rowTotal; i++) { 
        info("Read row " + i);

        XSSFRow dataRow = getRowData(i);

        setRowNumber(i);

        try {
            // do something

            setCellData("Passed", getRowNumber(), getColumnNumber());

            backgroundStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
            backgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);                

            currentCell = dataRow.getCell(getColumnNumber());
            currentCell.setCellStyle(backgroundStyle);                
        } catch (Exception e) {
            setCellData("Failed", getRowNumber(), getColumnNumber());

            backgroundStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
            backgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

            currentCell = dataRow.getCell(getColumnNumber());
            currentCell.setCellStyle(backgroundStyle);                
        }
    }

它有效,但是所有单元格均为红色。我希望“通过”单元格应该是绿色,但是“通过”单元格也应该是红色。

我想念什么?

谢谢。

德哈尔:

CellStyleapache-poi不打算为不同的样式使用单个实例
每个CellStyle样式定义一个可以应用于单元格的样式,而您想要在工作簿中使用的每种不同样式都需要一个样式,因为样式是在工作簿级别定义的。它们应该被重用,这也适用于Font中的CellStyles,它们也应该被唯一定义。工作簿可以处理或存储的样式最多,但是我不知道它的确切价值。

在您的使用示例中,建议在循环之前创建样式(至少,在实际代码中可能会有更好的样式创建位置),然后应用单元格所需的样式:

// create one style for a green background
CellStyle greenBackgroundStyle = wb.createCellStyle();
greenBackgroundStyle.setFillForegroundColor(IndexedColors.GREEN.getIndex());
backgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

// and another one for a red background
CellStyle redBackgroundStyle = wb.createCellStyle();
redBackgroundStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
redBackgroundStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);

// then start looping
for (int i = 1; i < rowTotal; i++) { 
    info("Read row " + i);

    XSSFRow dataRow = getRowData(i);
    setRowNumber(i);

    try {
        // do something
        setCellData("Passed", getRowNumber(), getColumnNumber());            
        currentCell = dataRow.getCell(getColumnNumber());
        // set the style with green background
        currentCell.setCellStyle(greenBackgroundStyle);                
    } catch (Exception e) {
        setCellData("Failed", getRowNumber(), getColumnNumber());
        currentCell = dataRow.getCell(getColumnNumber());
        // set the style with red background
        currentCell.setCellStyle(redBackgroundStyle);                
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Apache POI在Excel中合并单元格

如何更改特定单元格Apache POI 3.9的字体颜色

使用Apache POI在Excel单元格中写入数字

使用POI以数字格式设置Excel单元格值

使用apache poi将单元格内容的一部分设置为粗体?

颜色和正确对齐的Apache poi单元格样式

如何使用Apache POI缓存公式单元格

如何在apache poi表的不同行中设置特定的单元格宽度?

Apache-POI:创建电子表格时如何设置单元格的背景色?

用公式读取单元格会得出与Excel文件不同的结果-Java Apache POI

APACHE POI 4.1:从十六进制代码设置单元格背景颜色

如何使用Apache POI同时合并单元格和设置值?

如何使用Apache POI将.xlsx文件中的所有单元格的空白返回为null?

如何在poi word中设置单元格setVerticalAlignment?

Java Apache POI:Excel单元格颜色

使用PHPExcel在1个单元格内设置不同的字体颜色

如何使用Apache POI在Excel中为每个工作表添加不同的颜色

如何在Apache POI XSSF 4.10中将单元格类型设置为字符串?

如何使用两个按钮将表格单元格(td)的背景色设置为不同的颜色?

使用Apache POI从Excel读取单元格

使用Apache POI获取单元格颜色

Java Apache POI空白单元格

Apache POI - 条件格式 - 需要为规则和格式设置不同的单元格范围

如何使用apache poi为幻灯片设置不同的幻灯片过渡效果

如何防止用户使用 Apache poi 库在 excel 中选择锁定的单元格?

如何使用 apache poi 4.1.0 设置单元格的背景颜色

Apache POI 设置单元格边框不起作用

带有 Apache POI 4 的 XSSFColor:单元格背景颜色被另一种单元格背景颜色覆盖

如何快速为tableview中的每个单元格提供4种不同的颜色