问题描述

当前场景是,从模版读取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中的条件格式处理相关推荐

  1. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  2. 在Excel中使用条件格式——让excel根据列值调整行颜色

    目前,在做excel表格的时候,有一列是"是.否"的选择,希望此列选择了"是"的行显示不一样的颜色.查了很就,实验了一下原来用excel中的"条件格式 ...

  3. java excel 操作 jar包_[JAVA]使用POI向Excel中写入数据以及如何在Intellj IDEA中打jar包...

    freddon 发表于2018-05-30 阅读 1383 | 评论 0 给GF写的,现在记录下POI操作Excel读写过程;以及如何在Intellj IDEA中打jar包 代码如下: ``` imp ...

  4. java通过poi读取excel中的日期类型

    1.问题分析 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当 ...

  5. Excel中,条件格式的跟多应用-「数字条」「图标集」

    ■前言 之前只知道 条件格式中最下面的三个. 近期发现,原来还有别的功能. 太棒了!!! ■效果 ---

  6. poi导入excel日期处理_POI处理Excel中各种日期格式问题

    前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...

  7. Java 利用POI处理Excel的时间格式

    问题: 用Java的POI处理Excel中的时间单元格,往往得到的格式不是我们想要的.比如: 按上图中方式设置好后,通过以下代码 XSSFRow row = sheet.getRow(0);Cell ...

  8. java使用poi将excel转csv文件(所有sheet页、值)

    java使用poi将excel中每一个sheet页中数据转为csv文件 其中空单元格值为null,并去掉了转csv时数字等默认加上的小数点 使用jar包版本: poi-3.8 xmlbeans-3.1 ...

  9. 对比Excel学openpyxl系列之设置excel数字和条件格式

    目录 数字格式 条件格式 单元格规则 数据条 色阶 图标集 数字格式 要 对 数 字 的 显 示 格 式 进 行 调 整 , 需 要 用 到number_format属性,具体形式如下: from o ...

最新文章

  1. 如何攻破容器持久化存储挑战?
  2. 复旦高等代数 II(17级)每周一题
  3. 命名时取代基优先顺序_【选修五】高中化学重难点知识:有机物的命名方法
  4. python中json方法_在python中使用JSON库(通用方法),json,的,常用
  5. config.cfg.php,PHP:使用给定的结构获取变量形式的config.cfg
  6. windwo下载完nvm无法执行node
  7. 怎么关闭eureka的服务_SpringCloud之Eureka
  8. 华为员工能拿多少钱,揭秘一个真实的华为
  9. (ZT)中国姓氏韦氏拼音拼法
  10. 谈谈Scala的抽取器(Extractor)
  11. 【收藏】通信知识分类整理
  12. Latex之页边距设置
  13. Adobe相关(Windows平台)
  14. Linux入门---基本指令(下)
  15. Word代做,线上兼职,月入过万
  16. multiboot之ICAP
  17. 使用VMware创建虚拟机,并配置虚拟机网络
  18. node,core,CPU和GPU的关系
  19. 趣谈网络协议-课程介绍
  20. 虚拟盘rpc服务器不可用,rpc服务器不可用,手把手教你rpc服务器不可用怎么办

热门文章

  1. 数学建模python代码_主题模型 LDA 入门(附 Python 代码)
  2. OpenCV探索之路(二十七):皮肤检测技术
  3. introjs,intro.js-react 步骤指引
  4. USACO:1.3.6 Ski Course Design(滑雪场设计)
  5. 独一无二的出现次数-哈希表1207-python
  6. python设计麻将_麻将胡牌算法,python版本
  7. matlab怎样计算兰彻斯特方程,一步一步建立战斗模型
  8. Flutter入门:开发环境与开发工具的准备
  9. 魅族pro 7详细打开Usb调试模式的方法
  10. [IOS APP]简爱跑步12周