org.apache.poi 设置 Excel 单元格颜色 RGB

news/2024/7/21 7:39:54 标签: excel, apache, maven

一、背景说明

在使用 org.apache.poi 导出 Excel 时,需要设置部分单元格的颜色。

可以使用方法:org.apache.poi.ss.usermodel.CellStyle.setFillForegroundColor()org.apache.poi.ss.usermodel.CellStyle.setFillPattern() 来设置单元格的颜色和填充模式。

示例代码如下:

package com.miracle.excel;

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.IndexedColors;
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.XSSFWorkbook;

public class SetCellBackgroundColorExample {
    public static void main(String[] args) throws Exception {
        Workbook workbook = new XSSFWorkbook(); //创建Workbook对象
        Sheet sheet = workbook.createSheet("Sheet1"); //创建Sheet对象
        Row row = sheet.createRow(0); //创建行对象
        CellStyle style = workbook.createCellStyle(); //创建样式对象

        Cell cell = row.createCell(0); //创建单元格

        //设置样式的背景颜色为黄色
        style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        cell.setCellValue("单元格颜色设置"); //设置单元格的值
        cell.setCellStyle(style); //设置单元格样式

        //将设置好格式的单元格写入Excel文件
        FileOutputStream outputStream = new FileOutputStream("D:\\example.xlsx");
        workbook.write(outputStream);
        workbook.close();
    }
}

导出 Excel 文件效果如下:
在这里插入图片描述
如果使用 org.apache.poi 的常用版本 4.1.2, 设置颜色有局限,只能设置颜色枚举类 IndexedColors 中指定的颜色。

如果想灵活按照 RGB 颜色自由组合的方式设置单元格颜色,4.1.2 版本的 org.apache.poi 包是不支持的


二、实现方案

1、使用 5.2.3 及以上版本的 POI

如果想灵活按照 RGB 颜色自由组合的方式设置单元格颜色,必须要需要使用 5.2.3 及以上版本的 org.apache.poi 包,5.2.3以前的版本是不支持的
在这里插入图片描述
在 pom.xml 文件中添加以下依赖:

		<!-- 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>

Maven 远程仓库地址:https://mvnrepository.com/artifact/org.apache.poi/poi
在这里插入图片描述

可以使用 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()));

2、完整的代码

代码如下:

package com.miracle.excel;

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.IndexedColors;
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(); //创建Workbook对象
        Sheet sheet = workbook.createSheet("Sheet1"); //创建Sheet对象
        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));
        style.setFillForegroundColor(new XSSFColor(new java.awt.Color(255,0,255), new DefaultIndexedColorMap()));
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);

        cell.setCellValue("单元格颜色设置"); //设置单元格的值
        cell.setCellStyle(style); //设置单元格样式

        //将设置好格式的单元格写入Excel文件
        FileOutputStream outputStream = new FileOutputStream("D:\\example.xlsx");
        workbook.write(outputStream);
        workbook.close();
    }
}

运行效果如下:
在这里插入图片描述




http://www.niftyadmin.cn/n/279823.html

相关文章

合肥职业技术学院分类考试招生职业技能考试 -- 计算机专业

考试大纲模块一 专业能力测试主要内容模块二 技术技能测试主要内容分值分布 分模块讲解模块一 专业能力测试计算机的发展、类型及其应用领域计算机技术的发展计算机应用领域 计算机中数据的表示、存储和处理计算机软、硬件系统的组成及主要技术指标计算机软、硬件系统的组成硬件…

基于Mediapipe手势识别

Mediapipe是谷歌开源的跨平台机器学习解决方案&#xff0c;其能够通过摄像头传输的视频数据&#xff0c;实时地检测出人体姿态、面部表情、手势等信息&#xff0c;并以可视化的形式进行展示&#xff0c;为各类应用提供了更加精准和智能的基础支持。 基于Mediapipe进行手势识别…

leetcode-018-四数之和

题目及测试 package pid018; /* 18. 四数之和 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。 请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个…

linux--进程程序替换

目录 一、什么是进程程序替换 二、原理&#xff1a; 三、为什么要进行程序替换 四、六种替换函数 命名理解 (1)函数execl (2)函数execv (3)execlp (4)execvp (5)execle (6)execve 一、什么是进程程序替换 所谓进程程序替换&#xff0c;顾名思义&#xff0c;就是使用一个…

手动开发--简单的 Spring 基于注解配置的程序

目录 手动开发--简单的 Spring 基于注解配置的程序 需求说明 思路分析程序结构 2) 程序框架图 ● 应用实例 创建ComponentScan.java注解 创建WyxSpringConfig 创建WyxSpringApplicationContext 作用 注意 获取全类名的步骤 Class.forName和Class.loadClass的区别 手…

解决安卓中RecyclerView当一项被点击之后,后面每间隔相同的一段都会有其它项被点击

文章目录 问题描述缘由解决办法 1&#xff1a;提高缓存容量解决办法 2&#xff1a;每次在初始化视图数据之前重置视图数据解决办法 3&#xff1a;优化设计&#xff0c;不在视图中储存数据 问题描述 安卓开发会有很多很多莫名其妙的坑。笔者在使用 RecyclerView 的过程中&#x…

【STM32CubeMX】串口通信

前言 本文记录下我学习STM32CubeMX时的流程&#xff0c;方便以后回忆。本章记录串口通信。这里居然有玄学问题&#xff0c;给我整了好久&#xff0c;头都大了。可能也是我能力有限才有的吧&#xff0c;泪目。 目录 串口通信 串口通信 STM32CubeMX中的串口配置&#xff0c;配…

LLM(1)之基础使用prompt

LLM之prompt提示词 Author&#xff1a;Once Day Date&#xff1a;2023年4月30日 参考文章&#xff1a; 中文完整版全9集ChatGPT提示工程师&#xff5c;AI大神吴恩达教你写提示词ChatGPT Shortcut - 简单易用的 ChatGPT 快捷指令表&#xff0c;让生产力倍增&#xff01;标签筛…