问题描述

当前场景是,从模版读取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. JS魔法堂:属性、特性,傻傻分不清楚
  2. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | 完整代码示例 )
  3. 用Mysql创建设备管理信息系统数据库(图解)
  4. unity3d 随机生成地形之随机山脉
  5. asp.net在线发送邮件,以前没做过,调试好了。
  6. P4245 【模板】任意模数多项式乘法
  7. 北京科技大学计算机硕士,北京科技大学计算机专业硕士只有面授上课吗
  8. 我帮公司财务写了个“群发工资条”的Python脚本!
  9. 可作为GC Roots的对象
  10. 创建型模式、结构型模式和行为型模式_设计模式之创建型模式
  11. 探秘HDR:西瓜、抖音是如何做到让视频的画质堪比影院大片的?
  12. python教程初级有什么用_学Python编程有什么用?Python基础教程!
  13. python读写excel模块pandas_python3 基于pandas读写Excel
  14. html简单实现下拉菜单
  15. 安装CLOVER引导器到硬盘EFI分区
  16. git/gitflow git工作流
  17. Gif 录制工具:Screen2Gif
  18. Verilog语法概述(一)
  19. JavaScript如何实现汉字按拼音首字母分组拼序
  20. copy 收到_浔兴股份:关于收到福建证监局 对公司采取责令改正措施决定的公告...

热门文章

  1. 使用moco mock http请求
  2. 资料:高等数学学习笔记——高等数学(五)学习笔记汇总
  3. UltraEdit V18.10.1018 烈火绿色版
  4. 关于多元正态分布的条件分布的证明
  5. web应用安全测试之信息泄露
  6. Apache Pulsar集群搭建
  7. matlab画泰森多边形,你的SU建模太慢了!泰森多边形有快速生成大法!
  8. 工厂设计模式解决什么问题_使用工厂模式解决设计问题
  9. 浅析工厂企业培养TPM设备管理员必备的三大要素
  10. 一个仿支付宝风格的密码输入框