Excel催化剂开源第20波-条件格式版聚光灯功能,行列标示方便阅读
Excel聚光灯功能,辅助数据查看,选择区域下的高亮显示所在行列位置,此功能已被广大Excel开发者研究得十分透彻,各种版本的聚光灯流转在网络里,同样地也是一大堆的VBA代码,难找.Net的现成代码,且大部分代码两级分化的入门级和走火入魔级。
Excel催化剂用了条件格式的方式实现聚光灯,唯一的小问题就是把原生的撤销功能给清除了,但其实这真是无关痛痒的不影响使用的小缺憾。
实现原理简介
通过SelectionChange事件,当用户选择不同单元格时激发事件,事件中对当前选择的单元格所在的行列区域进行条件格式设定,且条件为真,格式为填充色,并且条件格式的优先级为最顶级,即这个条件格式覆盖其他同样区域的条件格式。
关键点为将当前的条件格式起作用的区域进行保存,下次SelectionChange响应时,进行上次区域条件格式删除和当前区域的条件格式重新设定。
具体代码
在Ribbon上用复选框的方法提供开启或关闭开关。并将状态写入到配置信息的SpotLightIsEnable上
private void chkSpotLight_Click(object sender, RibbonControlEventArgs e){try{if (!chkSpotLight.Checked){SpotLight.DeletePreviouSpotLightCondition();}Properties.Settings.Default.SpotLightIsEnable = chkSpotLight.Checked; Properties.Settings.Default.Save(); } catch (Exception) { throw; } }
订阅SheetSelectionChange 事件
Common.ExcelApp.SheetSelectionChange += ExcelApp_SheetSelectionChangeSpotLightSetting;
事件方法实现
当开关打开时才生效
private void ExcelApp_SheetSelectionChangeSpotLightSetting(object Sh, Excel.Range Target) { if (Properties.Settings.Default.SpotLightIsEnable) { SpotLight.AddFormatConditionToShowSpotLight(Target); } }
核心代码实现
private static Excel.Range previousSpotLightRange = null;public static void AddFormatConditionToShowSpotLight(Excel.Range target) { DeletePreviouSpotLightCondition(); Excel.Worksheet sht = target.Parent; int colIndex = target.Column; int rowIndex = target.Row; Excel.Range spotLightRange = Common.ExcelApp.Union(sht.Range[sht.Cells[1,colIndex],target.Offset[-1,0].Resize[1,target.Columns.Count]], sht.Range[target.Offset[target.Rows.Count, 0], sht.Cells[sht.Rows.Count, colIndex]], sht.Range[sht.Cells[rowIndex, 1], target.Offset[0, -1].Resize[target.Rows.Count,1]], sht.Range[target.Offset[0, target.Columns.Count],sht.Cells[rowIndex,sht.Columns.Count]] ); Excel.FormatCondition currentFormatCondition = spotLightRange.FormatConditions.Add(Type: Excel.XlFormatConditionType.xlExpression, Formula1: "=TRUE"); currentFormatCondition.SetFirstPriority(); currentFormatCondition.StopIfTrue = true; Color spotColor = Properties.Settings.Default.SpotLightColor; currentFormatCondition.Interior.Color = ColorTranslator.ToOle(spotColor); previousSpotLightRange = spotLightRange; } public static void DeletePreviouSpotLightCondition() { if (previousSpotLightRange != null) { Excel.FormatCondition previousFormatCondition = previousSpotLightRange.FormatConditions[1]; if (previousFormatCondition.Formula1 == "=TRUE") { previousFormatCondition.Delete(); } previousSpotLightRange = null; } }
同样地,更友好的方式是开放对颜色进行自定义设置,增加一个按钮用于设置颜色
private void btnSpotLightColorSetting_Click(object sender, RibbonControlEventArgs e) { ColorDialog colorDialog = new ColorDialog(); var result = colorDialog.ShowDialog(); if (result == DialogResult.OK) { Properties.Settings.Default.SpotLightColor = colorDialog.Color; btnSpotLightColorSetting.Image = SpotLight.GetSpotColorImage(); } }
public static Image GetSpotColorImage() { Bitmap bmp = new Bitmap(50,50); Graphics graphics = Graphics.FromImage(bmp); SolidBrush brush = new SolidBrush(Properties.Settings.Default.SpotLightColor); graphics.FillRectangle(brush, 0, 0, 50, 50); return bmp; }
结语
此篇讲解了聚光灯的实现效果,其中也可以看到条件格式的妙用,是可以在许多场景上有很好的应用。虽然聚光灯功能不算什么刚需功能,但部分初级用户响应度还是蛮好的,不妨在通用插件时也将其实现一翻。
技术交流QQ群
QQ群名:Excel催化剂开源讨论群, QQ群号:788145319
![](https://upload-images.jianshu.io/upload_images/9936495-70edc95751c9fc68.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/226/format/webp)
关于Excel催化剂
Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!
Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!
Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q
![](https://upload-images.jianshu.io/upload_images/9936495-1ec30fd89d19873e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300/format/webp)
![](https://upload-images.jianshu.io/upload_images/9936495-d54c58f58ae097a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300/format/webp)
取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。
最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!
关于Excel催化剂作者
姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)
技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。
擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。
2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。
和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。
技术交流QQ群
QQ群名:Excel催化剂开源讨论群, QQ群号:788145319
![](https://upload-images.jianshu.io/upload_images/9936495-70edc95751c9fc68.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/226/format/webp)
关于Excel催化剂
Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!
Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!
Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q
![](https://upload-images.jianshu.io/upload_images/9936495-1ec30fd89d19873e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300/format/webp)
![](https://upload-images.jianshu.io/upload_images/9936495-d54c58f58ae097a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300/format/webp)
取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。
最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!
关于Excel催化剂作者
姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)
技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。
擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。
2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。
和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。
转载于:https://www.cnblogs.com/ExcelCuiHuaJi/p/10579259.html
Excel催化剂开源第20波-条件格式版聚光灯功能,行列标示方便阅读相关推荐
- Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术
Excel催化剂开源第23波-VSTO开发辅助录入功能关键技术 Excel催化剂 2019.01.12 14:10* 字数 2948 阅读 41评论 0喜欢 0 编辑文章 在Excel催化剂的几大辅助 ...
- Excel催化剂开源第50波-Excel与PowerBIDeskTop互通互联之第四篇
答应过的全盘分享,也必承诺到底,此篇PowerBI功能分享的最后一篇,讲述如何导出数据模型的元数据,笔者定义其为模型的数据字典. 此篇对应功能实现出自:第6波-导出PowerbiDesktop模型数据 ...
- Excel催化剂开源第10波-VSTO开发之用户配置数据与工作薄文件一同存储
在传统的VBA开发中,若是用的是普通加载项方法,是可以存储数据在xlam上的,若用的是Com加载项方法同时是Addins程序级别的项目开发的,配置文件没法保存到工作薄中,一般另外用配置文件来存放供调用 ...
- Excel催化剂开源第16波-VSTO开发之脱离传统COM交互以提升性能
在VSTO开发或其他COM技术开发过程中,甚至VBA也是,在和Excel交互中,难免会遇到性能瓶颈问题,COM技术的交互实在太慢,对大量数据读写等操作,耗时太长,容易卡用户界面以为是程序死机等等. 在 ...
- Excel催化剂开源第42波-与金融大数据TuShare对接实现零门槛零代码获取数据
在金融大数据功能中,使用了TuShare的数据接口,其所有接口都采用WebAPI的方式提供,本来还在纠结着应该搬那些数据接口给用户使用,后来发现,所有数据接口都有其通用性,结合Excel灵活友好的输入 ...
- Excel催化剂开源第37波-音视频文件元数据提取(分辨率,时长,采样率等)
上一篇提到图片元信息Exif的提取,当然还有一类音视频文件,也同样存储着许多宝贵的元数据,那就开源到底呗,虽然自己找寻过程也是蛮艰辛坎坷的,大家看后有收获,只求多多传播下,让前人的工作可以更有价值. ...
- Excel催化剂开源第47波-Excel与PowerBIDeskTop互通互联之第一篇
当国外都在追求软件开源,并且在GitHub等平台上产生了大量优质的开源代码时,但在国内却在刮着一股收割小白智商税的知识付费热潮,实在可悲. 互联网的精神乃是分享,让分享带来更多人的受益. 在Power ...
- Excel催化剂开源第15波-VSTO开发之DataTable数据导出至单元格区域
上篇提到如何从Excel界面上拿到用户的数据,另外反方向的怎样输出给用户数据,也是关键之处. VSTO最大的优势是,这双向的过程中,全程有用户的交互操作. 而一般IT型的程序,都是脱离用户的操作,只能 ...
- Excel催化剂开源第12波-VSTO开发遍历功能区所有菜单按钮及自定义函数清单
在插件开发过程中,随着功能越来越多,用户找寻功能入口将变得越来越困难,在Excel催化剂 ,将采用遍历所有功能的方式,让用户可以轻松使用简单的查找功能找到想要功能所在位置,查找的范围有:功能按钮的显示 ...
最新文章
- ISP【三】———— raw读取、不同格式图片差异
- pip install 默认安装路径修改
- mysql5.6.37驱动_MySql (mysql-5.6.37) 在Windows的安装及使用
- SCOI2018 退役记
- 部署redis mysql_【服务器部署Redis、Mysql等】-解决方式
- ansi编码转换_8b/1b编码是个什么东东
- python执行到input后执行下一程序_Python基础知识储备,如何开关一个while循环
- 计算机管理在哪个里面,在计算机中哪个子系统是其他子系统的管理者
- 深入理解Spring之九:DispatcherServlet初始化源码分析
- ms sql server 系统表详细说明
- 学生信息管理系统(JAVA+MYSQL)
- PYTHON 获取淘宝服务器时间 显示在tkinter的UI
- ws协议绑定服务器域名,Websocket直接域名连接
- 计算机合并单元格怎么操作,excel怎么合并单元格方法
- 树莓派3B+安装JupyterLab
- vue-cli十分钟学习入门笔记――开袋即食
- python游戏编程快速上手pdf_Python游戏编程快速上手 (斯维加特著) 中文pdf完整版[18MB]...
- android调用拨号界面拨打电话功能,Android实现拨打电话功能
- matlab 读取脉冲数,已知一段波形,求脉冲个数,用代码实现
- android linux pthread_cancel,Android NDK缺失pthread_cancel和pthread_setcancelstate
热门文章
- csdn的自动保存功能是摆设吗?我从下午2点写到现在的博客,最后点了下撤销,全给我删光了,你不能保存能不能别显示这个fw功能???????
- 齐次裁剪矩阵(投影矩阵)ProjectionMatrix参数分析以及NDC坐标原理解释
- 不顾及后果(钱真的那么重要吗??不见液晶电视不上车的新娘,新郎愤而转身娶爱... )
- CSS 3.0实现创意菜单导航条
- 【JAVA核心知识】29:MySQL架构基础篇 ---《高性能MySQL》读书笔记
- 《有效写作十三篇》读书笔记
- 皮具封边发黑_手工皮具封边,如何更加光滑饱满,老皮匠都这样去操作
- 平衡树其一(AVL,Treap)
- 在PyCharm搭建Python环境+Anaconda配置
- 无线AP与无线路由器的区别?什么是无线AP?