当前位置: 首页 > news >正文

NPOI - ConditionalFormattingRule

NPOI 给xls(xlsx)创建条件格式

获取 XSSFSheetConditionalFormatting 对象

初始化

IWorkbook _workbook = new XSSFWorkbook();
ISheet _dataSheet = _workbook.GetSheet("template");
ISheetConditionalFormatting fcs = _dataSheet.SheetConditionalFormatting;

调用 XSSFSheetConditionalFormatting 的 CreateConditionalFormattingRule 方法

该类总共提供了6个CreateConditionalFormattingRule重载方法,可以根据需求选择

CreateConditionalFormattingRule(String formula);
CreateConditionalFormattingRule(ComparisonOperator comparisonOperation, String formula);
CreateConditionalFormattingRule(ComparisonOperator comparisonOperation, String formula1, String formula2);
CreateConditionalFormattingRule(IconSet iconSet);
CreateConditionalFormattingRule(XSSFColor color);
CreateConditionalFormattingRule(ExtendedColor color);

示例代码

CellRangeAddress range = CellRangeAddress.ValueOf("A1:A100");
//创建名称管理器(可以通过execl INDIRECT函数获取其引用位置的值集合)
IName sexName = _workbook.CreateName();
sexName.NameName = "Sex";
sexName.RefersToFormula = $"Value!$A$1:$A$2";
// 该rule表示A列只允许填写 Sex 指定的值。注意 A1 没有加 $,所以如果是第二列,则代表的是 A2,可参考第5点cell引用
IConditionalFormattingRule rule = fcs.CreateConditionalFormattingRule($"=AND(ISNA(MATCH(A1,INDIRECT(\"Sex\"),0)),TRIM(A1)<>\"\")");
XSSFPatternFormatting fillColor = (XSSFPatternFormatting)rule.CreatePatternFormatting();
fillColor.FillBackgroundColor = IndexedColors.Violet.Index;
//自定义颜色
fillColor.FillBackgroundColorColor = new XSSFColor(new byte[] { 112, 48, 160 });
fillColor.FillPattern = FillPattern.SolidForeground;
fcs.AddConditionalFormatting(new CellRangeAddress[] { range }, rule);

ComparisonOperator 参数

ComparisonOperator 总共提供了 Between,NotBetween,Equal,NotEqual,GreaterThan,LessThan,GreaterThanOrEqual,LessThanOrEqual 几种比较操作,适用于将当前cell的值和固定值做比较

formula 参数

如果和 comparisonOperation 参数共同使用,则返回该公式计算后的值,和cell值做比较;
如果只有 formula 参数,则以 formula 计算后的值为 true/false 应用格式

将格式应用于整列

NPOI 随着格式的数量增加,渲染格式的耗时会大幅的提高(如果20个格式需要1分钟,那么200个格式可能需要半个小时),所以应尽量批量应用公式。
而批量应用公式的时候,需要理解清楚xlsx的cell引用(https://www.zhihu.com/question/372122014),比如$A1和A1,加了1和A1,加了1A1,加了符合的表示固定引用,不加表示相对引用,相对引用则会随单元格的区域变动而变动

某列重复值规则

var formula = "COUNTIF($D$2:$D$101,D2)>1"

全部代码如下

IWorkbook _workbook = new XSSFWorkbook();
ISheet _dataSheet = _workbook.GetSheet("template");
ISheetConditionalFormatting fcs = _dataSheet.SheetConditionalFormatting;
CellRangeAddress range = CellRangeAddress.ValueOf("A1:A100");
//创建名称管理器(可以通过execl INDIRECT函数获取其引用位置的值集合)
IName sexName = _workbook.CreateName();
sexName.NameName = "Sex";
sexName.RefersToFormula = $"Value!$A$1:$A$2";// 该rule表示A列只允许填写 Sex 指定的值。注意 A1 没有加 $,所以如果是第二列,则代表的是 A2,可参考第5点cell引用
IConditionalFormattingRule rule = fcs.CreateConditionalFormattingRule($"=AND(ISNA(MATCH(A1,INDIRECT(\"Sex\"),0)),TRIM(A1)<>\"\")");
XSSFPatternFormatting fillColor = (XSSFPatternFormatting)rule.CreatePatternFormatting();
fillColor.FillBackgroundColor = IndexedColors.Violet.Index;
//自定义颜色
fillColor.FillBackgroundColorColor = new XSSFColor(new byte[] { 112, 48, 160 });
fillColor.FillPattern = FillPattern.SolidForeground;
fcs.AddConditionalFormatting(new CellRangeAddress[] { range }, rule);

https://www.cnblogs.com/daxiongblog/p/11388729.html
https://juejin.cn/post/7130090277821218852

相关文章:

NPOI - ConditionalFormattingRule

NPOI 给xls(xlsx)创建条件格式 获取 XSSFSheetConditionalFormatting 对象 初始化 IWorkbook _workbook new XSSFWorkbook(); ISheet _dataSheet _workbook.GetSheet("template"); ISheetConditionalFormatting fcs _dataSheet.SheetConditionalFormatting;调用…...

JavaのString类这一篇就够了(包含StringBuffer_Builder)

1.&#x1f957;String类简介 在我们写代码的时候&#xff0c;String总是充斥着前前后后。 但你会不会经常力不从心&#xff0c; “这个*** 字符串怎么** 转换不成功啊” “*** 这个字符串到底是常量还是对象啊” “这*** 字符串内存结构到底* * * 是什么啊” “为啥我的字符串…...

C# dataGridView 导出表格 xls NPOI 2.4.1 版本

using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; try { SaveFileDialog fileDialog new SaveFileDialog(); fileDialog.Filter “Excel(97-2003)|*.xls”; if (fileDialog.ShowDialog() System.Windows.Forms.DialogResult.Cancel) { return; } //不允许dataGridView…...

秒杀项目的消息推送

目录 一、创建消费者 二、创建订单链路配置 1.定义RabbitMQ配置类 2.创建RabbitmqOrderConfig配置类 三、如何实现RabbitMQ重复投递机制 1.开启发送者消息确认模式 2.消息发送确认 ① 创建ConfirmCallBacker确认模式 ② 创建ReturnCallBack退回模式 3.创建生产者 …...

最近开发及 vue3 几个小总结

只是单纯记录一下最近维护了几个项目之后的感触&#xff0c;也只是在自己现在水平上面的一些感觉。发发牢骚&#xff0c;水水文章 是否过度封装 可能水平不够吧&#xff0c;在 axios 封装的时候&#xff0c;只是把响应和拦截还有一些全局的配置封装了一下&#xff0c;并没有加…...

代谢组学分享-花青素通过调节氨基酸代谢改善糖尿病肾病的肾功能

代谢组学文献分享&#xff0c;文章标题&#xff1a;Anthocyanin improves kidney function in diabetic kidney disease by regulating amino acid metabolism 发表期刊&#xff1a;Journal of Translational Medicine 影响因子&#xff1a;8.44 作者单位&#xff1a;中山大…...

超简单!pytorch入门教程:Tensor

超简单&#xff01;pytorch入门教程&#xff1a;Tensor 一、pytorch安装 安装pytorch之前&#xff0c;需要安装好python&#xff08;废话&#xff09;&#xff0c;还没安装过python的宝宝请先移步到廖雪峰的python教程&#xff0c;待安装熟悉完之后&#xff0c;再过来这边。 …...

如何使用COCO数据集,注意事项

COCO数据集可用来训练目标检测&#xff0c;分类&#xff0c;实例分割等。 下面简单说下如何使用这个数据集&#xff0c; 数据集下载可用如下的代码进行&#xff0c;以2017为例。 # Download the image data. cd ./images echo "Downloading MSCOCO train images ...&quo…...

金三银四跳槽季,JAVA面试撸题就来【笑小枫】微信小程序吧~

JAVA面试撸题就来【笑小枫】微信小程序啦~ 疫情已过&#xff0c;金三银四即将到来&#xff0c;小伙伴们是否有跳槽的打算呢&#xff1f;不管有没有&#xff0c;技术不能丢&#xff0c;让我们一起来撸题吧。 博主最近整理了一批面试题&#xff0c;包括JAVA基础、多线程与锁、Red…...

分享115个HTML电子商务模板,总有一款适合您

分享115个HTML电子商务模板&#xff0c;总有一款适合您 115个HTML电子商务模板下载链接&#xff1a;https://pan.baidu.com/s/158y3jP0tv7ZikxNOBMKsSg?pwdt970 提取码&#xff1a;t970 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 import os import shuti…...

Python 字符串

字符串是 Python 中最常用的数据类型。我们可以使用引号 ( 或 " ) 来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。例如&#xff1a;var1 Hello World!var2 "Python Runoob"Python 访问字符串中的值Python 不支持单字符类型&#xff…...

总线定义,车载总线:车载etherNet or CAN

总线的定义总线是连接多个设备或者接入点的数据传输通路。这里面的关键词是多个设备或者接入点&#xff0c;所以不要过于局限的看待总线。根据互联的设备/接入点不同&#xff0c;传输的数据带宽&#xff0c;速率&#xff0c;距离不同和应用场景的不同都可能有不同的总线。不同的…...

Python(for和while)循环嵌套及用法

Python 不仅支持 if 语句相互嵌套&#xff0c;while 和 for 循环结构也支持嵌套。 所谓嵌套&#xff08;Nest&#xff09;&#xff0c;就是一条语句里面还有另一条语句&#xff0c;例如 for 里面还有 for&#xff0c;while 里面还有 while&#xff0c;甚至 while 中有 for 或者…...

6万字电力行业系统解决方案光伏电站综合安防系统解决方案

【版权声明】本资料来源网络&#xff0c;知识分享&#xff0c;仅供个人学习&#xff0c;请勿商用。【侵删致歉】如有侵权请联系小编&#xff0c;将在收到信息后第一时间删除&#xff01;完整资料领取见文末&#xff0c;部分资料内容&#xff1a; 目录 第 一 章背景与需求 1.1行…...

[Android Studio]Android 数据存储--SQLite数据库存储

&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Android Debug&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; Topic 发布安卓学习过程中遇到问题解决过程&#xff0c;希望我的解决方案可以对小伙伴们有帮助。 &#x1f4cb;笔记目…...

学校节能降耗减排方案——能耗监管平台的建设及效果剖析

摘要&#xff1a;作为崭新的校园能耗管理手段&#xff0c;能耗监测平台以传统管理方式无法企及的优势有力地提升了高校能源管理工作的水平&#xff0e;从而受到了相关管理者的青睐。本文梳理总结了高校能耗监测平台的基本组成和优势特点&#xff0c;同时对能耗平台建设和使用中…...

探索IP地址的应用

无论是互联网行业还是传统行业都会用到网络&#xff0c;作为企业如何维护网络安全&#xff0c;保障网站不被攻击&#xff0c;数据不被泄露等。这个时候我们就会通查询IP归属地&#xff0c;辅助企业解决安全问题。下面介绍一下ip归属地在各行业的具体应用。1.网安行业应用一&…...

点赞破万!阿里面试官总结的2022最新1685页Java面试宝典太全了

程序员入职企业的难度也在持续加大&#xff0c;如何顺利通过面试成为了大家所关心的话题。针对这些人群的需求&#xff0c;小编从阿里找来一份让大家在求职过程中旗开得胜&#xff01;是从什么时候开始准备的&#xff1f;大概的我已经记不清了&#xff0c;可能是 4 月份左右开始…...

项目搭建规范

一. 代码规范 1.1. 集成editorconfig配置 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。 # http://editorconfig.org root true [*] # 表示所有文件适用 charset utf-8 # 设置文件字符集为 utf-8 indent_style space # 缩进…...

8.Docker Machine

Docker Machine Docker Machine是Docker官方编排&#xff08;Orchestration&#xff09;项目之一&#xff0c;负责在多种平台上快速安装 Docker 环境。 Docker Machine项目基于Go语言实现&#xff0c;目前在Github上进行维护。 Docker Machine是 Docker 官方提供的一个工具&…...

如何配合使用ESLINT 和 PRETTIER

各自的作用 eslint&#xff1a;静态分析语法错误prettier&#xff1a;代码格式化工具&#xff08;需要在IDE中安装prettier的插件&#xff09; 使用方法&#xff1a; 安装 npm install eslint --save-dev // 创建 .eslintrc.json 文件 npx eslint --init npm install eslint-…...

学英语的优势已来,抓住这个机会

文 / 冰雪&#xff08;微信公众号&#xff1a;王不留&#xff09; ChatGPT大火&#xff0c;国外的商业价值还没找到&#xff0c;咱们这边已经开始变现了。谷雨小姐姐昨天在”一起学英语”微信群发了一张“收割韭菜”的文案截图。 299入社群&#xff0c;服务内容为&#xff1a;免…...

基于微信小程序云开发实现考研题库小程序项目(完整版)

今天手把手的带大家实现一款答题类的题库小程序&#xff0c;如果着急的话&#xff0c;可以直接去看文末源码.下载与项目部署。考研题库小程序云开发实战&#xff0c;完整版提供给大家学习。题库小程序&#xff0c;基于云开发的微信答题小程序&#xff0c;软件架构是微信原生小程…...

AI一点通:使用 ColumnTransformer 转换 Pandas DataFrame 的一个或多个列

在处理表格数据时&#xff0c;常常需要对一个或多个列进行转换以使它们更适合于分析或建模。在许多情况下&#xff0c;可以使用 Pandas 库轻松完成这些转换。然而&#xff0c;在处理大型数据集或构建机器学习管道时&#xff0c;使用 scikit-learn 的 ColumnTransformer 类来将转…...

【C语言】全局变量、局部变量和静态变量的区别

目录一、变量&#xff08;一&#xff09;全局变量&#xff08;二&#xff09;局部变量&#xff08;三&#xff09;静态变量&#xff08;1&#xff09;静态全局变量&#xff08;2&#xff09;静态局部变量二、常量一、变量 1、变量定义 变量的名称可以由字母、数字和下划线字符…...

血氧仪「上潜」,智能穿戴「下沉」

文|智能相对论作者|沈浪缺货、涨价、一“仪”难求......过去短短的几周&#xff0c;血氧仪市场持续走热&#xff0c;受到前所未有的关注&#xff0c;像鱼跃医疗这样的业内巨头更是赚得盆满钵满&#xff0c;但同时也深陷“发国难财”的舆论泥潭&#xff0c;说来也是唏嘘。尽管目…...

CPP2022-计算机类-期末考试

6-1 判断素数 分数 5 全屏浏览题目 切换布局 作者 李国瑞 单位 东北大学秦皇岛分校 设计一个函数&#xff0c;判断输入数据是否为素数&#xff0c;返回bool类型结果。 函数接口定义&#xff1a; bool prime(int num); 说明&#xff1a;num为正整数。 裁判测试程序样例&…...

【蓝桥集训】第二天——差分

作者&#xff1a;指针不指南吗 专栏&#xff1a;Acwing 蓝桥集训每日一题 &#x1f43e;做题过程中首先应该注意时间复杂度问题&#x1f43e; 文章目录1.改变数组元素2.差分3.差分矩阵1.改变数组元素 给定一个空数组 V 和一个整数数组 a1,a2,…,an。 现在要对数组 V 进行 n 次操…...

Spring Boot最核心的27个注解,你了解多少?

https://blog.csdn.net/ManuMAX/article/details/129017443 导读 Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架&#xff0c;它不仅可以方便地创建生产级的Spring应用程序&#xff0c;还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成…...

css3弹性盒子

弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。 弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。 弹性容器内包含了一个或多个弹性子元素。 display:flex; 修改排列方式: 0. direction: rtl; //(right-to-left),弹性子元素的…...

公司网站用哪个软件做/建网络平台要多少费用

LinkLinkLink JZOJJZOJJZOJ 391039103910 DescriptionDescriptionDescription InputInputInput 第一行两个正整数n 和m&#xff0c;分别表示间谍网络中的特工总数&#xff0c;以及事件的总数。 接下来m 行&#xff0c;第i 行给出第i 个事件的信息&#xff0c;格式及含义参见题…...

国内网站推广/关键词投放

1. 为什么需要Vxlan 普通的VLAN数量只有4096个&#xff0c;无法满足大规模云计算IDC的需求&#xff0c;而IDC为何需求那么多VLAN呢&#xff0c;因为目前大部分IDC内部结构主要分为两种L2&#xff0c;L3。L2结构里面&#xff0c;所有的服务器都在一个大的局域网里面&#xf…...

好视频下载软件/网站推广优化公司

函数调用中的意义不明确的参数&#xff08;Naked parameters &#xff09;可能会影响可读性&#xff0c;当参数名称的含义不明显时&#xff0c;请为参数添加 C 样式注释 (/* ... */) Bad // func printInfo(name string, isLocal, done bool)printInfo("foo", true…...

公司网站建设请示/免费推广产品的网站

1. SPI 数据收发函数HAL_SPI_xxx传入传出 buf 指针地址必需16位对齐 例如&#xff0c;SPI收发数据函数HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)&#xff0c; pTxData和pRxD…...

青岛网站美工/品牌营销服务

方法一&#xff1a; 在一个项目结束的时候&#xff0c;往往根据需要直接映射到一个IP地址上。此时就需要去除端口和项目名了&#xff0c;在访问的时候。下面根据具体的例子提供一种实现方法。 一、去掉项目名称 把<Context docBase"D:\apache-tomcat-6.0.20\webapps\…...

兰州做网站或小程序/指数是指什么

JS 仿腾讯发表微博的效果 最近2天研究了下 腾讯发表微博的效果 特此来分享下&#xff0c;效果如下&#xff1a; 在此分享前 来谈谈本人编写代码的习惯&#xff0c;很多人会问我既然用的是jquery框架 为什么写的组件不用Jquery那种形式&#xff1f;我当时回答的是&#xff1a;每…...