POI设置自定义的RGB背景颜色

本文介绍使用Apache POI库在Java中创建Excel文件并自定义单元格背景颜色的方法。通过创建不同样式的单元格,展示了如何设置单元格背景色及如何将默认颜色替换为自定义RGB颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提出问题

POI如何自定义单元格背景颜色???

解决问题

例一:具体的看注释

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;

import java.io.FileOutputStream;

/**
 * Created by Ay on 2016/4/29.
 */
public class PoiBackgroundColorTest {

public static void main(String[] args) throws Exception{
    //创建一份
    HSSFWorkbook excel = new HSSFWorkbook();
    //创建第一个sheet
    HSSFSheet sheet = excel.createSheet("我的POI之旅");
    //创建第一行
    HSSFRow row = sheet.createRow((short) 0);
    //创建第一个单元格
    HSSFCell cell = row.createCell((short) 0);
    //设置单元格的值
    cell.setCellValue("Ay");
    //生成单元格样式
    HSSFCellStyle style = excel.createCellStyle();
    //设置背景颜色
    style.setFillForegroundColor(HSSFColor.LIME.index);
    //solid 填充  foreground  前景色
    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    cell.setCellStyle(style);
    //通过流写到硬盘
    FileOutputStream out = new FileOutputStream("D:/old_color.xls");
    excel.write(out);
    out.close();

    //======  这里是重点,马上要自定义单元格的样式了  =============
    cell.setCellValue("Al");
    //拿到palette颜色板
    HSSFPalette palette = excel.getCustomPalette();
    //这个是重点,具体的就是把之前的颜色 HSSFColor.LIME.index
    //替换为  RGB(51,204,204) 宝石蓝这种颜色
    //你可以改为 RGB(0,255,127)
    palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 0, (byte) 255, (byte) 127);
    //======  这里是重点,马上要自定义单元格的样式了  =============
    out = new FileOutputStream("D:/new_color.xls");
    excel.write(out);
    out.close();
}

}

D:/old_color.xls 结果 
这里写图片描述

D:/new_color.xls 结果 
这里写图片描述

### 如何在 EasyExcel 中设置单元格的自定义背景颜色 在 EasyExcel 中,可以通过实现 `org.apache.poi.ss.usermodel.FillPatternType` 和 `org.apache.poi.ss.usermodel.IndexedColors` 或者通过十六进制颜色值来设置单元格的背景颜色。以下是具体的方法和示例代码。 #### 方法一:使用 IndexedColors 预定义的颜色 如果需要使用预定义的颜色集合,可以利用 Apache POI 提供的标准颜色索引表 `IndexedColors` 来设置背景颜色[^1]。 ```java import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.metadata.WriteSheet; import org.apache.poi.ss.usermodel.*; import java.util.ArrayList; import java.util.List; public class CustomBackgroundColorExample { public static void main(String[] args) { String fileName = "custom_background_color.xlsx"; List<List<String>> data = new ArrayList<>(); for (int i = 0; i < 10; i++) { List<String> row = new ArrayList<>(); row.add("Row " + i); data.add(row); } WriteSheet writeSheet = EasyExcel.writerSheet("Sheet1").build(); ExcelWriter excelWriter = EasyExcel.write(fileName).build(); // 创建自定义样式 CellStyle cellStyle = createCellStyle(excelWriter.getWorkbook()); int rowIndex = 0; for (List<String> rowData : data) { WriteTable writeTable = EasyExcel.writerTable(rowIndex++).registerWriteHandler(new CellStyleStrategy(cellStyle)).build(); excelWriter.write(data, writeSheet, writeTable); } excelWriter.finish(); } private static CellStyle createCellStyle(Workbook workbook) { CellStyle style = workbook.createCellStyle(); style.setFillForegroundColor(IndexedColors.LIGHT_GREEN.getIndex()); // 设置背景颜色为浅绿色 style.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 填充模式为纯色填充 return style; } } ``` 上述代码展示了如何创建一个带有浅绿色背景的单元格样式并应用到整个表格中的每一行数据上。 --- #### 方法二:使用 RGB 十六进制颜色值 对于更灵活的颜色需求,可以直接指定 RGB 的十六进制颜色值。这通常用于高级场景下的精确配色控制[^2]。 ```java private static CellStyle createCustomRgbCellStyle(Workbook workbook) { CellStyle style = workbook.createCellStyle(); // 使用 HSSFColor.HSSFColorPredefined 枚举或者直接设置 ARGBHex 字符串 short colorIndex = ((XSSFWorkbook)workbook).createCustomPalette().addColor((byte)255, (byte)204, (byte)204); // 浅红色 style.setFillForegroundColor(colorIndex); style.setFillPattern(FillPatternType.SOLID_FOREGROUND); return style; } ``` 此方法允许开发者自由调整任意一种颜色作为单元格背景色,并支持动态生成调色板。 --- #### 注意事项 1. **兼容性问题** 如果目标文件格式为 `.xlsx`,则推荐优先采用 XSSF 工作簿实例;而如果是 `.xls` 文件,则应切换至 HSSF 实现类。 2. **性能优化** 当处理大规模数据时,建议复用相同的 `CellStyle` 对象以减少内存占用以及提升渲染效率。 3. **依赖版本确认** 确保项目中引入的是最新版 Alibaba EasyExcel 及其底层依赖库(Apache POI),因为某些功能可能仅存在于较新的发行版本里。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值