JAVA使用POI对Excel中的条件格式处理
问题描述
当前场景是,从模版读取excel的信息和格式,新建一个excel,并设置格式和数据,但是在设置条件样式(条件格式)没有设置成功,这里记录一下解决办法。
从百度也看了好多文章,都试了也不行。接下来,说一下解决思路
解决思路
POI中excel的条件格式是 “XSSFSheetConditionalFormatting” 这样的一个类,条件样式中有“条件”和“格式” 是两个不同的处理地方,也就是意味着,我获取了模版中的“条件”设置到新的excel之后,还需要获取模版中的“格式”设置到新的excel里。
1、获取模版和新的excel中sheet页的“条件样式”对象(因为条件样式是针对sheet页来的)
XSSFSheetConditionalFormatting oldFormatting = oldSheet.getSheetConditionalFormatting(); //获取模版的sheet中的条件样式对象
XSSFSheetConditionalFormatting newFormatting = newSheet.getSheetConditionalFormatting(); //获取新的excel的sheet中的条件样式对象
2、获取模版中有多少“条件样式”
int numConditionalFormattings = oldFormatting.getNumConditionalFormattings(); //获取模版的sheet中有多少条件样式
3、对模版中的条件样式进行循环,并获取模版中的每一条“条件样式”
XSSFConditionalFormatting conditionalFormattingAt = oldFormatting.getConditionalFormattingAt(i); //获取模版的sheet中的每一个条件样式
4、获取模版中“条件样式”对应的单元格数组
CellRangeAddress[] formattingRanges = conditionalFormattingAt.getFormattingRanges(); //获取模版的sheet中的"条件样式"对应的单元格
5、获取模版中“条件”的下标(我这里只取了一个,如果是多个就循环取)
int numberOfRules = conditionalFormattingAt.getNumberOfRules(); //获取模版的sheet中"条件"的下标
7、获取模版中的“条件”对象,并设置到新的sheet里
XSSFConditionalFormattingRule rule = conditionalFormattingAt.getRule(numberOfRules-1); //通过下标获取模版的sheet中的"条件"
newFormatting.addConditionalFormatting(formattingRanges,rule); //设置新的sheet中的"条件样式"中的"条件"
8、在新的sheet里创建“样式”对象
XSSFConditionalFormattingRule conditionalFormattingColorScaleRule = newFormatting.createConditionalFormattingColorScaleRule(); //创建新的sheet中的"条件样式"中的"样式"
XSSFPatternFormatting patternFormatting = conditionalFormattingColorScaleRule.createPatternFormatting(); //获取"样式"对象
9、将模版的“样式”设置到新的sheet里
patternFormatting.setFillBackgroundColor(rule.getPatternFormatting().getFillBackgroundColorColor()); //设置新sheet中"条件样式"的背景
测试解析
如果只设置到了第7步,就是下面的结果
如果设置到了第9步,就是下面的结果
不扯没用的,直接上代码
/*** 将模版sheet中的条件样式设置到新的sheet中* @param newSheet* @param oldSheet*/public static void setConditionStyle(XSSFSheet newSheet,XSSFSheet oldSheet){XSSFSheetConditionalFormatting oldFormatting = oldSheet.getSheetConditionalFormatting(); //获取模版的sheet中的条件样式对象XSSFSheetConditionalFormatting newFormatting = newSheet.getSheetConditionalFormatting(); //获取新的excel的sheet中的条件样式对象int numConditionalFormattings = oldFormatting.getNumConditionalFormattings(); //获取模版的sheet中有多少条件样式for (int i = 0; i < numConditionalFormattings; i++) {XSSFConditionalFormatting conditionalFormattingAt = oldFormatting.getConditionalFormattingAt(i); //获取模版的sheet中的每一个条件样式CellRangeAddress[] formattingRanges = conditionalFormattingAt.getFormattingRanges(); //获取模版的sheet中的"条件样式"对应的单元格int numberOfRules = conditionalFormattingAt.getNumberOfRules(); //获取模版的sheet中"条件"的下标XSSFConditionalFormattingRule rule = conditionalFormattingAt.getRule(numberOfRules-1); //通过下标获取模版的sheet中的"条件"newFormatting.addConditionalFormatting(formattingRanges,rule); //设置新的sheet中的"条件样式"中的"条件"XSSFConditionalFormattingRule conditionalFormattingColorScaleRule = newFormatting.createConditionalFormattingColorScaleRule(); //创建新的sheet中的"条件样式"中的"样式"XSSFPatternFormatting patternFormatting = conditionalFormattingColorScaleRule.createPatternFormatting(); //获取"样式"对象patternFormatting.setFillBackgroundColor(rule.getPatternFormatting().getFillBackgroundColorColor()); //设置新sheet中"条件样式"的背景}}
如果有什么疑问,或者指教 欢迎加QQ:1318623133
----------------------------------------- I`am Joshua,may god bless you
JAVA使用POI对Excel中的条件格式处理相关推荐
- java通过poi读取excel中的日期类型数据或自定义类型日期
java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2019,而Excel中输入的是 2019/10/12 ...
- 在Excel中使用条件格式——让excel根据列值调整行颜色
目前,在做excel表格的时候,有一列是"是.否"的选择,希望此列选择了"是"的行显示不一样的颜色.查了很就,实验了一下原来用excel中的"条件格式 ...
- java excel 操作 jar包_[JAVA]使用POI向Excel中写入数据以及如何在Intellj IDEA中打jar包...
freddon 发表于2018-05-30 阅读 1383 | 评论 0 给GF写的,现在记录下POI操作Excel读写过程;以及如何在Intellj IDEA中打jar包 代码如下: ``` imp ...
- java通过poi读取excel中的日期类型
1.问题分析 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当 ...
- Excel中,条件格式的跟多应用-「数字条」「图标集」
■前言 之前只知道 条件格式中最下面的三个. 近期发现,原来还有别的功能. 太棒了!!! ■效果 ---
- poi导入excel日期处理_POI处理Excel中各种日期格式问题
前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...
- Java 利用POI处理Excel的时间格式
问题: 用Java的POI处理Excel中的时间单元格,往往得到的格式不是我们想要的.比如: 按上图中方式设置好后,通过以下代码 XSSFRow row = sheet.getRow(0);Cell ...
- java使用poi将excel转csv文件(所有sheet页、值)
java使用poi将excel中每一个sheet页中数据转为csv文件 其中空单元格值为null,并去掉了转csv时数字等默认加上的小数点 使用jar包版本: poi-3.8 xmlbeans-3.1 ...
- 对比Excel学openpyxl系列之设置excel数字和条件格式
目录 数字格式 条件格式 单元格规则 数据条 色阶 图标集 数字格式 要 对 数 字 的 显 示 格 式 进 行 调 整 , 需 要 用 到number_format属性,具体形式如下: from o ...
最新文章
- JS魔法堂:属性、特性,傻傻分不清楚
- 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )
- 用Mysql创建设备管理信息系统数据库(图解)
- unity3d 随机生成地形之随机山脉
- asp.net在线发送邮件,以前没做过,调试好了。
- P4245 【模板】任意模数多项式乘法
- 北京科技大学计算机硕士,北京科技大学计算机专业硕士只有面授上课吗
- 我帮公司财务写了个“群发工资条”的Python脚本!
- 可作为GC Roots的对象
- 创建型模式、结构型模式和行为型模式_设计模式之创建型模式
- 探秘HDR:西瓜、抖音是如何做到让视频的画质堪比影院大片的?
- python教程初级有什么用_学Python编程有什么用?Python基础教程!
- python读写excel模块pandas_python3 基于pandas读写Excel
- html简单实现下拉菜单
- 安装CLOVER引导器到硬盘EFI分区
- git/gitflow git工作流
- Gif 录制工具:Screen2Gif
- Verilog语法概述(一)
- JavaScript如何实现汉字按拼音首字母分组拼序
- copy 收到_浔兴股份:关于收到福建证监局 对公司采取责令改正措施决定的公告...