poi workbook excel类型不定的情况下单元格自定义背景色的设置

1 篇文章 0 订阅

项目场景:

项目中用到poi,有一个需要设置单元格背景色的需求


问题描述

尝试自带的预定义颜色,显示出的背景色都太深,达不到要求。于是便想到要自定义背景色。首先尝试了这种设置方法,

styleMain.setFillForegroundColor(new XSSFColor(new java.awt.Color(224, 217, 217),new DefaultIndexedColorMap()).getIndex());

结果显示出来是一片黑。


原因分析:

接下来经过查询知道,HSSFWorkbook和XSSFWorkbook设置背景色的方法是不同的。
HSSFWorkbook是这样设置的:

HSSFWorkbook excel = new HSSFWorkbook();//此行代码可以忽略
HSSFPalette palette = excel.getCustomPalette(); //拿到颜色板
palette.setColorAtIndex(HSSFColor.LIME.index, (byte) 0, (byte) 255, (byte) 127);//定义颜色块

XSSFWorkbook是这样设置的:

XSSFWorkbook wb = new XSSFWorkbook();//此行代码可以忽略
	XSSFCellStyle style = wb.createCellStyle();//创建一个单元格style
	XSSFColor color = new XSSFColor(new java.awt.Color(198,217,240),new DefaultIndexedColorMap()); //new java.awt.Color(198,217,240) 里的参数为RGB
	style.setFillForegroundColor(color);//放入背景颜色参数中
   style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
	style.setAlignment(HorizontalAlignment.CENTER);
	style.setVerticalAlignment(VerticalAlignment.CENTER);

这里有个问题,我项目里是使用workbook接口再根据不同的情况使用不同的实现类,因为workbook接口内没有对应的方法,所以无法直接使用这样的设置方式


解决方案:

经过思考,
1、接口实例化之后,就会有具体的实现类,有没有办法通过接口来调用实现类。这个思路行不通,因为接口本身是一种抽象,不能通过接口直接看到实现类。
2、既然无法通过接口来调用,那就只能通过实现类,能不能把接口转成实现类,这个思路行的通。形成这样的代码

 if(workbook instanceof HSSFWorkbook){
      HSSFWorkbook hssf = (HSSFWorkbook)workbook;
      HSSFPalette palette = hssf.getCustomPalette();                    palette.setColorAtIndex(HSSFColor.HSSFColorPredefined.LIME.getIndex(), (byte) 245, (byte) 245, (byte) 245);
}

问题解决。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值