Java POI excel单元格背景色(填充)、字体颜色(对齐)、边框(颜色)、行高、列宽设置

文章目录

  • 1、Excel Cell单元格背景色+颜色名称对照关系
  • 2、Excel Cell单元格背景填充样式+颜色填充对照关系
  • 3、Excel Cell字体样式设置+对照图
  • 4、Excel 行高、列宽设置
  • 5、Excel单元格边框设置+边框类型图片对比
  • 附一:一些问题
    • 1、关于列宽使用磅*20的计算方式
    • 2、关于行高使用磅*256+185的计算方式
    • 3、关于sheet.getLastRowNum()最终行数不正确问题
    • 4、IDEA中按住快捷键(Shift)+鼠标悬浮到对应单词可以查看颜色
  • 附二:参考链接

需要的Maven环境配置

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version></dependency>

部分需要注意的问题,通过注释的方式写在代码里面了,看代码的时候需要注意下注释

1、Excel Cell单元格背景色+颜色名称对照关系

    /*** 设置单元格背景颜色* <pre>*     像素、磅、点、缇等各种单位换算参考链接*          https://blog.csdn.net/tanghuan/article/details/113539369*     Excel Cell设置背景颜色参考链接*          https://blog.csdn.net/weixin_43845227/article/details/123580523*     Excel POI Cell背景颜色对照关系表参考链接*          https://blog.csdn.net/lenovo96166/article/details/102765781*          https://www.cnblogs.com/quchunhui/p/14378115.html*     Excel Cell POI Width宽度设置公式参考链接(拟合方程)*          https://blog.csdn.net/duqian42707/article/details/51491312*          https://blog.csdn.net/aosica321/article/details/72320050* </pre>*/public static void setBackgroundColorCellStyle() throws IOException {HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("excel样式设置");int rowIndex = 0;for (IndexedColors color : IndexedColors.values()) {short colorIndex = color.getIndex();HSSFCellStyle cell1Style = workbook.createCellStyle();// 设置的背景颜色cell1Style.setFillForegroundColor(colorIndex);// 填充效果(全景填充)cell1Style.setFillPattern(FillPatternType.SOLID_FOREGROUND);cell1Style.setAlignment(HorizontalAlignment.CENTER);cell1Style.setVerticalAlignment(VerticalAlignment.CENTER);HSSFRow row = sheet.createRow(rowIndex++);row.setHeight((short) (25 * 20));// 第一列HSSFCell cell1 = row.createCell(0);cell1.setCellStyle(cell1Style);cell1.setCellValue("X:" + colorIndex);// 第二列HSSFCellStyle cell2Style = workbook.createCellStyle();cell2Style.setAlignment(HorizontalAlignment.CENTER);cell2Style.setVerticalAlignment(VerticalAlignment.CENTER);HSSFCell cell2 = row.createCell(1);cell2.setCellStyle(cell2Style);cell2.setCellValue(color.name());// 设置列宽sheet.setColumnWidth(0, 10 * 256 + 185);sheet.setColumnWidth(1, 35 * 256 + 185);}FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel背景颜色列表.xlsx");workbook.write(outputStream);outputStream.close();workbook.close();}

image.pngimage.pngimage.png

2、Excel Cell单元格背景填充样式+颜色填充对照关系

    /*** 设置背景颜色填充效果* <pre>*      背景颜色填充效果参考链接*          https://blog.csdn.net/qq_39541254/article/details/107940224* </pre>*/public static void setFillBackgroundColor() throws IOException {HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("excel填充设置");int rowIndex = 0;short colorIndex = IndexedColors.RED.getIndex(); // 选择红色(可参照上图背景色色号) --> 10// 填充样式for (FillPatternType patternType : FillPatternType.values()) {HSSFCellStyle cell1Style = workbook.createCellStyle();// 设置的背景颜色cell1Style.setFillForegroundColor(colorIndex);// 填充效果(全景填充)cell1Style.setFillPattern(patternType);// 设置垂直居中cell1Style.setAlignment(HorizontalAlignment.CENTER);cell1Style.setVerticalAlignment(VerticalAlignment.CENTER);// 设置字体HSSFFont font = workbook.createFont();// 加粗font.setBold(true);cell1Style.setFont(font);HSSFRow row = sheet.createRow(rowIndex++);// 设置行高:height = 磅 * 20 (1磅=0.353毫米=20缇)-> POI中行高是"缇(twips)"row.setHeight((short) (25 * 20));// 第一列HSSFCell cell1 = row.createCell(0);cell1.setCellStyle(cell1Style);cell1.setCellValue("code:" + patternType.getCode());HSSFCellStyle cell2Style = workbook.createCellStyle();// 设置垂直居中cell2Style.setAlignment(HorizontalAlignment.CENTER);cell2Style.setVerticalAlignment(VerticalAlignment.CENTER);// 第二列HSSFCell cell2 = row.createCell(1);cell2.setCellStyle(cell2Style);cell2.setCellValue(patternType.name());// 设置列宽: width = 256*磅 + 185sheet.setColumnWidth(0, 10 * 256 + 185);sheet.setColumnWidth(1, 24 * 256 + 185);}FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel背景填充效果.xlsx");workbook.write(outputStream);outputStream.close();workbook.close();}

image.pngimage.png

3、Excel Cell字体样式设置+对照图

    /*** 设置单元格字体样式*/public static void setCellFontStyle() throws IOException {HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("excel字体样式");HSSFCellStyle cellStyle = workbook.createCellStyle();HSSFFont font = workbook.createFont();// 字体加粗font.setBold(true);// 字体倾斜font.setItalic(true);// 字体删除线font.setStrikeout(true);// 字体颜色font.setColor(IndexedColors.YELLOW.getIndex());// 字体大小:字号font.setFontHeightInPoints((short) 14);// 设置行高// font.setFontHeight((short) 14);// 字体font.setFontName("宋体");cellStyle.setFont(font);// 设置文字垂直居中cellStyle.setAlignment(HorizontalAlignment.CENTER);cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 设置单元格内容自动换行(文字超出列宽自动换行)cellStyle.setWrapText(true);HSSFRow row = sheet.createRow(0);HSSFCell cell = row.createCell(0);cell.setCellStyle(cellStyle);cell.setCellValue("字体");row.setHeight((short) (30 * 20));sheet.setColumnWidth(0, 30 * 256 + 185);FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel字体样式.xlsx");workbook.write(outputStream);outputStream.close();workbook.close();}

image.pngimage.png

4、Excel 行高、列宽设置

    /*** 行高列宽设置*/public static void setRowHeightAndCellWidth() throws IOException {HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("excel行高、列宽");// 定义一个5行、5列的数据int[][] data = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {16, 17, 18, 19, 20}, {21, 22, 23, 24, 25}};for (int rowIndex = 0; rowIndex < data.length; rowIndex++) {int[] cellData = data[rowIndex];HSSFRow row = sheet.createRow(rowIndex);// 行高计算方式:缇(twips) = 磅 * 20 ==> 换算 1磅=20缇row.setHeight((short) (25 * 20));for (int cellIndex = 0; cellIndex < cellData.length; cellIndex++) {HSSFCell cell = row.createCell(cellIndex);// 列宽计算方式:8磅 * 256 + 185sheet.setColumnWidth(cellIndex, 8 * 256 + 185);cell.setCellValue(cellData[cellIndex]);}}FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel行高、列宽.xlsx");workbook.write(outputStream);outputStream.close();workbook.close();}

image.png

5、Excel单元格边框设置+边框类型图片对比

    /*** 设置多有边框样式 + 颜色*/public static void setAllBorderStyle() throws IOException {HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet sheet = workbook.createSheet("excel单元格边框样式");// ======================= 设置边框int rowIndex = 0;for (BorderStyle borderStyle : BorderStyle.values()) {int cellIndex = 0;HSSFRow row = sheet.createRow(rowIndex++);row.setHeight((short) (35 * 20));// 第一列HSSFCell cell = row.createCell(cellIndex);HSSFCellStyle topBorderStyle = workbook.createCellStyle();// 上边框样式topBorderStyle.setBorderTop(borderStyle);cell.setCellValue("设置上边框(" + borderStyle.name() + ")");cell.setCellStyle(topBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);cellIndex += 2;// 第三列HSSFCell cell2 = row.createCell(cellIndex);HSSFCellStyle bottomBorderStyle = workbook.createCellStyle();// 下边框样式bottomBorderStyle.setBorderBottom(borderStyle);cell2.setCellValue("设置下边框(" + borderStyle.name() + ")");cell2.setCellStyle(bottomBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);cellIndex += 2;// 第五列HSSFCell cell3 = row.createCell(cellIndex);HSSFCellStyle leftBorderStyle = workbook.createCellStyle();// 左边框样式leftBorderStyle.setBorderLeft(borderStyle);cell3.setCellValue("设置左边框(" + borderStyle.name() + ")");cell3.setCellStyle(leftBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);cellIndex += 2;// 第七列HSSFCell cell4 = row.createCell(cellIndex);HSSFCellStyle rightBorderStyle = workbook.createCellStyle();// 左边框样式rightBorderStyle.setBorderRight(borderStyle);cell4.setCellValue("设置右边框(" + borderStyle.name() + ")");cell4.setCellStyle(rightBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);}// ================= 设置边框并设置颜色rowIndex += 2;for (BorderStyle borderStyle : BorderStyle.values()) {int cellIndex = 0;HSSFRow row = sheet.createRow(rowIndex++);row.setHeight((short) (35 * 20));// 第一列HSSFCell cell = row.createCell(cellIndex);HSSFCellStyle topBorderStyle = workbook.createCellStyle();// 上边框样式topBorderStyle.setBorderTop(borderStyle);// 上边框颜色topBorderStyle.setTopBorderColor(IndexedColors.RED.getIndex());cell.setCellValue("设置上边框(" + borderStyle.name() + ")");cell.setCellStyle(topBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);cellIndex += 2;// 第三列HSSFCell cell2 = row.createCell(cellIndex);HSSFCellStyle bottomBorderStyle = workbook.createCellStyle();// 下边框样式bottomBorderStyle.setBorderBottom(borderStyle);// 下边框颜色bottomBorderStyle.setBottomBorderColor(IndexedColors.GREEN.getIndex());cell2.setCellValue("设置下边框(" + borderStyle.name() + ")");cell2.setCellStyle(bottomBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);cellIndex += 2;// 第五列HSSFCell cell3 = row.createCell(cellIndex);HSSFCellStyle leftBorderStyle = workbook.createCellStyle();// 左边框样式leftBorderStyle.setBorderLeft(borderStyle);// 左边框颜色leftBorderStyle.setLeftBorderColor(IndexedColors.YELLOW.getIndex());cell3.setCellValue("设置左边框(" + borderStyle.name() + ")");cell3.setCellStyle(leftBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);cellIndex += 2;// 第七列HSSFCell cell4 = row.createCell(cellIndex);HSSFCellStyle rightBorderStyle = workbook.createCellStyle();// 左边框样式rightBorderStyle.setBorderRight(borderStyle);// 右边框颜色rightBorderStyle.setRightBorderColor(IndexedColors.ORANGE.getIndex());cell4.setCellValue("设置右边框(" + borderStyle.name() + ")");cell4.setCellStyle(rightBorderStyle);sheet.setColumnWidth(cellIndex, 35 * 256 + 185);}FileOutputStream outputStream = new FileOutputStream("D:/temp/Excel单元格边框样式.xlsx");workbook.write(outputStream);outputStream.close();workbook.close();}

边框样式对照表,括号内为BorderStyle枚举对象

在这里插入图片描述

附一:一些问题

1、关于列宽使用磅*20的计算方式

image.png

2、关于行高使用磅*256+185的计算方式

image.png

3、关于sheet.getLastRowNum()最终行数不正确问题

image.png
如果整个Excel中存在空行(整行空),当时若干空行下面存在其他数据,这时候获取到的最终行号就不对了,尤其是存在合并单元格的情况最容易出现这类问题。
image.png
很明显10、11、13、14全都是空行了,这时候的lastNum就是不正确的,这种情况要尤为注意。

避免这种情况的出现最直接的一种方式就是,预先知道数据存在多少行,先把所有行都生成sheet.createRow(0)。


同样地,空白的单元格也会出现这种情况,如果单元格不存在或没有样式,获取到的最后一个单元格列数也是不正确的。

4、IDEA中按住快捷键(Shift)+鼠标悬浮到对应单词可以查看颜色

在这里插入图片描述
在这里插入图片描述

附二:参考链接

像素、磅、点、缇等各种单位换算_点和像素换算_tanghuan的博客-CSDN博客
JAVA对excle创建、读取、设置单元格颜色、背景色、跨行跨列_java设置excel背景色_谷同学的博客-CSDN博客
POI4颜色名称,颜色汉语名称,颜色对应关系_软件工程师文艺的博客-CSDN博客
POI设置Excel单元格背景色(setFillForegroundColor与setFillPattern的使用) - 大墨垂杨 - 博客园
java用POI设置Excel的列宽_sheet.setcolumnwidth_duqian42707的博客-CSDN博客
Java POI 设置Excel单元格的宽度和高度_java poi 设置单元格宽度_aosica的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15103.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发抖音短视频账号矩阵系统技术实现能解决一机一号实名认证问题?

一、短视频账号矩阵系统解决一机一号实名认证问题&#xff1f; 目前站在开发者角度来看问的比较多&#xff0c;做开发技术类矩阵saas工具&#xff0c;需要的多账号怎么解决&#xff0c;这需要从两个方面来做开发解决。 第一、从开发角度来看技术开发首先解决代理ip分发问题&a…

DAY38:贪心算法(五)K次取反后最大数组和+加油站

文章目录 1005.K次取反后最大化的数组和思路直接升序排序的写法最开始的写法&#xff1a;逻辑错误修改版时间复杂度 自定义sort对绝对值排序的写法sort的自定义比较函数cmp必须声明为static的原因std::sort升降序的问题&#xff08;默认升序&#xff09;时间复杂度 总结 134.加…

N天爆肝数据库——MySQL(1)

数据库概念理解 数据库 DB 存储数据的仓库 数据库管理系统 DBMS 操纵和管理数据库的大型软件 SQL 操作关系型数据库的编程语言&#xff0c;定义了用一套操作关系型数据库同意标准 学习 SQL 的作用 SQL 是一门 ANSI 的标准计算机语言&#xff0c;用来访问和操作数据库系统。S…

前端优化的一些方向

对于浏览器来说&#xff0c;加载网页的过程可以分为两部分&#xff0c;下载文档并响应&#xff08;5%左右&#xff09;&#xff0c;下载各种组件&#xff08;95%左右&#xff09;。 而对比大部分优秀网页来说下载文档&#xff08;10%~ 20%&#xff09;&#xff0c;下载组件&…

Mac OS装Windows系统开启虚拟化

目录 引言前提macOS开启虚拟化mac下的Windows开启虚拟化双系统开启虚拟化修改启动管理程序开启虚拟化 注意事项 引言 在开发工作中&#xff0c;很多软件需要用到virtual box&#xff0c;但是使用virtual box需要开启虚拟化&#xff0c;而有些苹果笔记本虚拟化是关闭的&#xf…

Day_61-62 决策树

目录 Day_61-62决策树(准备工作) 一. 算法的基本概念 1. 决策树的定义 2. 如何构建决策树&#xff1f; 2.1 熵 2.2 信息增益原则 2.3 计算步骤 二. 示例演示 1. 第一次节点决策分类&#xff1a; 2. 后续节点的决策分类 3. 决策分类的结束条件 三. 代码实现 1. 主函数 2. 两个构…

Presto之内存池管理

一. 前言 在Presto 之GENERAL POOL & RESERVED POOL_王飞活的博客-CSDN博客 的文章中&#xff0c;我们介绍了在Presto中&#xff0c;内存分成了保留区和通用区两个内存池区进行管理。本文则主要介绍Presto是是如何实现内存池管理的。 二. Presto内存池大小控制管理 Presto的…

异地远程访问本地SQL Server数据库【无公网IP内网穿透】

文章目录 1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转发自CSDN远程穿透的文章&#xff1a;无需公网…

将迷你世界的蓝图导出成表格

将迷你世界的蓝图导出成表格 使用方法为编译此代码&#xff0c;然后将游戏存档的vbp文件拖入编译出的exe上即可导出csv文件 #include<iostream> #include<Windows.h> #include<direct.h> #include<io.h> using namespace std; #define N_L 4 //这个改…

GLM: General Language Model Pretrainingwith Autoregressive Blank Infilling翻译理解

GPT&#xff08;autoregressive&#xff09;模型是一个自回归模型&#xff0c;利用left-to-right语言模型&#xff0c;由于不是双向attention 机制&#xff0c;因此不能再NLU任务中&#xff0c;获取充分的上下文信息&#xff0c;BERT类似自编码&#xff08;autoencoding&#x…

【SpringBoot——Error记录】

java: 警告: 源发行版 17 需要目标发行版 17 问题描述 IDEA运行Spring工程报错&#xff1a;java: 警告: 源发行版 17 需要目标发行版 17 问题原因 idea工具jdk版本使用问题 解决办法 1、File(文件) -> Project Structure(项目结构)->修改jdk版本即可 选中项目文件…

spring之ApplicationContext

spring之ApplicationContext ApplicationContextApplicationContext源码ApplicationContext继承接口分析ApplicationContext两个比较重要的实现类AnnotationConfigApplicationContextClassPathXmlApplicationContext 国际化---MessageSource资源加载---ResourceLoader获取运行时…