600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > POI导出——Excel实现单元格的背景色填充

POI导出——Excel实现单元格的背景色填充

时间:2019-07-01 11:24:58

相关推荐

POI导出——Excel实现单元格的背景色填充

1.背景

随着业务需求的扩充,简简单单的Excel导出已经不能满足客户的胃口了。而POI api这个家伙里面的坑有时候真的是让你分分钟没有脾气,所以打算记录下来,分享一下poi的坑及其解决方法。

2.POI导出Excel设置单元格背景色

2.1使用poi提供的背景色

//1.获取Excel工作簿对象HSSFWorkbook wb = new HSSFWorkbook();//2.获取sheet对象HSSFSheet sheet = wb.createSheet("sheet名");//2.创建单元格样式对象HSSFCellStyle cellStyle = wb.createCellStyle();//3.添加常用样式cellStyle.setWrapText(true);//设置自动换行cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中显示cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框//4.设置单元格背景色cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//填充单元格cellStyle.setFillForegroundColor(HSSFColor.RED.index);//设置单元格背景色//5.创建单元格并为单元格添加样式对象/*5.1在创建单元格前需要先创建行 */HSSFRow row = sheet.createRow(0);//这里就默认创建第一行HSSFCell cell = row.createCell(0);//默认创建第一个单元格cell.setCellStyle(cellStyle); //设置单元格样式cell.setCellType(HSSFCell.CELL_TYPE_STRING);//设置单元格内容的类型cell.setCellValue("Hello World!");//设置单元格内容

2.2使用自定义的背景色

使用自定义的背景色,需要额外的添加一些操作。这里以16进制的颜色为例,演示如何从16进制的颜色一步步设为单元格的背景色。

2.2.1自定义颜色方法

下述方法的作用简单来说就是:根据传入的HSSFPalette 画板对象和color16进制的颜色字符串,先转成RGB码,然后使用HSSFPalette画板对象和index下标重新设置对应下标的颜色,并对HSSFCellStyle单元格样式进行颜色的设置。

强调说明:

(1)在进行颜色重新生成的时候,即如下代码。需要注意index下标的范围是在[8,64],设置成其他数字的下标,无效!

palette.setColorAtIndex((short)(index), (byte) r, (byte) g, (byte) b);

(2)根据下标和RGB码重新设置完颜色后,后续需要使用的话只需要根据下标设置单元格颜色即可。

hssfCellStyle.setFillForegroundColor((short)(index));

/*** 设置自定义颜色* @param palette excel工作空间的绘画板* @param hssfCellStyle cell的单元格样式对象* @param color 16进制颜色字符串【如:#C1232B】* @param index 下标,范围在[8~64]*/public static void setCellColor(HSSFPalette palette,HSSFCellStyle hssfCellStyle,String color,int index){//转为RGB码int r = Integer.parseInt((color.substring(0,2)),16); //转为16进制int g = Integer.parseInt((color.substring(2,4)),16);int b = Integer.parseInt((color.substring(4,6)),16);//这里index是索引palette.setColorAtIndex((short)(index), (byte) r, (byte) g, (byte) b);hssfCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); hssfCellStyle.setFillForegroundColor((short)(index));}

3.结尾

关于POI这家伙,里边还有许多的坑存在,以后遇到了会一一记录下来。关于自定义颜色这一块,其实也还没有做好,但是这里只是做一些简单的实现,类似颜色锁定等问题就不阐述了,因为基本上够用了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。