上一篇文章演示了如何使用poi 4.1.2
设置单元格背景色,但4.1.2
版本只能使用预设的颜色枚举来设置颜色。如果想更加自由的设置任意颜色,则需要升级poi的版本到5.2.3
及以上版本。这篇文章将演示如何使用POI 5.2.3
的版本实现单元格自定义背景色功能。
版本
org.apache.poi版本:5.2.3
。
在5.2.3
可以通过以下两种方式来设置自定义颜色:
-
可以使用 XSSFColor 构造函数 来创建颜色,如下面的代码所示:
style.setFillForegroundColor(new XSSFColor(new byte[]{(byte) 255, (byte) 0, (byte) 255}, null));
这将使用RGB颜色值(255, 0, 255)来创建一个颜色对象,并将其设置为单元格的填充颜色。
-
使用 RGB颜色值 来设置颜色
style.setFillForegroundColor(new XSSFColor(new java.awt.Color(255,0,255), new DefaultIndexedColorMap()));
版本引入
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml-schemas -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
代码
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.DefaultIndexedColorMap;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class SetCellBackgroundColorExample {
public static void main(String[] args) throws Exception {
// 创建一个新的工作簿
Workbook workbook = new XSSFWorkbook();
// 创建一个新的工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 创建一个新的行
Row row = sheet.createRow(0);
// 创建一个新的单元格样式
CellStyle style = workbook.createCellStyle();
// 创建一个单元格
Cell cell = row.createCell(0);
// 枚举的方式
// style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
// 设置样式的背景颜色为自定义的紫色
// style.setFillForegroundColor(new XSSFColor(new byte[]{(byte) 255, (byte) 0, (byte) 255}, null));
XSSFColor color = new XSSFColor(new java.awt.Color(255, 0, 255), new DefaultIndexedColorMap());
style.setFillForegroundColor(color);
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 设置单元格的值
cell.setCellValue("单元格颜色设置");
// 应用样式到单元格
cell.setCellStyle(style);
// 创建一个文件输出流,将设置好格式的单元格写入Excel文件
try (FileOutputStream outputStream = new FileOutputStream("D:\\example.xlsx")) {
workbook.write(outputStream);
}
// 关闭工作簿
workbook.close();
}
}
这个示例代码将创建一个名为CellColorExample.xlsx
的Excel文件,并在其中设置单元格背景颜色。
效果图
以下是IndexedColors
中所有颜色的效果。
其他
另外,对以下内容感兴趣的同学请移步对应教程: