1. 概述

在Excel表格中,通过改变表头的背景颜色使其看起来更为优雅。本文将介绍如何使用 Apache POI 来实现这一功能。如果你需要了解如何在Java中与Microsoft Excel交互的基础知识,我们建议你阅读我们的《使用Java处理Microsoft Excel》教程。

2. Maven依赖

首先,我们需要在pom.xml文件中添加poi-ooxml依赖:

<dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>5.2.5</version>
 </dependency>

3. 更改单元格背景颜色

3.1. 单元格背景简介

在Excel中,我们可以通过填充颜色或图案来改变单元格背景。下图中,单元格A1填充了浅蓝色背景,而B1填充了图案。这个图案以黑色为底,上面有浅蓝色斑点:

3.2. 更改背景颜色的代码

Apache POI提供了三种方法来改变背景颜色。在CellStyle类中,我们可以使用setFillForegroundColorsetFillPatternsetFillBackgroundColor方法。IndexedColors类定义了一组颜色列表,而FillPatternType类定义了一组图案列表。

有时,setFillBackgroundColor方法可能会让人误解,但仅使用这个方法并不能改变单元格背景。要通过填充单一颜色改变背景,我们需要使用setFillForegroundColorsetFillPattern方法。第一个方法指定填充的颜色,第二个方法则指定了要使用的实心填充模式。

以下代码片段是将单元格A1背景设置为示例所示的方法:

public void changeCellBackgroundColor(Cell cell) {
    CellStyle cellStyle = cell.getCellStyle();
    if(cellStyle == null) {
        cellStyle = cell.getSheet().getWorkbook().createCellStyle();
    }
    cellStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
    cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    cell.setCellStyle(cellStyle);
}

如果要使用图案填充背景,我们需要使用两种颜色:一种颜色填充整个背景,另一种颜色填充在第一种颜色上的图案。这里我们需要使用这三种方法。setFillBackgroundColor方法用于指定背景颜色,仅此方法不足以产生效果。我们需要使用setFillForegroundColor选择第二种颜色,并使用setFillPattern声明图案类型。

以下代码片段是将单元格B1背景设置为示例所示的方法:

public void changeCellBackgroundColorWithPattern(Cell cell) {
    CellStyle cellStyle = cell.getCellStyle();
    if(cellStyle == null) {
        cellStyle = cell.getSheet().getWorkbook().createCellStyle();
    }
    cellStyle.setFillBackgroundColor(IndexedColors.BLACK.index);
    cellStyle.setFillPattern(FillPatternType.BIG_SPOTS);
    cellStyle.setFillForegroundColor(IndexedColors.LIGHT_BLUE.getIndex());
    cell.setCellStyle(cellStyle);
}

有关更多代码细节,请查看完整的Java类和相关的Junit测试用例

4. 总结

在这篇简短教程中,我们学习了如何使用Apache POI在Excel单元格中更改背景颜色。通过CellStyle类的setFillForegroundColorsetFillPatternsetFillBackgroundColor这三个方法,我们可以轻松地改变单元格的背景颜色和填充模式。

示例代码可以在GitHub上找到