首页 > 编程语言 >EXCEL C# 聚光灯

EXCEL C# 聚光灯

时间:2024-02-05 21:13:23浏览次数:32  
标签:FormatConditions C# EXCEL Range xlapp MyConditionRng fc ws 聚光灯

C# EXCEL版本聚光灯,开发框架利用EXCELDNA 开源库

public static class Extension
 {
     static Application _xlapp = (Application)ExcelDnaUtil.Application;
     public const string MyConditionRng = "$1:$1048576";
     [ExcelCommand(MenuName = "拓展", MenuText = nameof(开启聚光灯))]
     public static void 开启聚光灯()
     {
         try
         {
             _xlapp.SheetSelectionChange += _xlapp_SheetSelectionChange; ;
             _xlapp.WorkbookOpen += _xlapp_WorkbookOpen;
             _xlapp.WorkbookBeforeClose += _xlapp_WorkbookBeforeClose; ;
            foreach (Workbook item in _xlapp.Workbooks)
             {
                 foreach (Worksheet ws in item.Worksheets)
                 {
                     FormatCondition fc = null;
                     if (ws.Range[MyConditionRng].FormatConditions.Count == 0)
                     {
                         fc = ws.Range[MyConditionRng].FormatConditions.Add(XlFormatConditionType.xlExpression, XlFormatConditionOperator.xlEqual,
                             "=OR(CELL(\"ROW\")=ROW(),CELL(\"COL\")=COLUMN())");
                     }
                     else fc = ws.Range[MyConditionRng].FormatConditions.Item(1);
                     fc.SetFirstPriority();
                     fc.Interior.Color = ColorTranslator.ToOle(Color.LightPink);
                     fc.Font.Bold = true;
                 }
             }
         }
         catch (Exception ex)
         {
             Interaction.MsgBox(ex.Message);
         }
     }

     private static void _xlapp_WorkbookBeforeClose(Workbook Wb, ref bool Cancel)
     {
         try
         {
             foreach (Worksheet ws in Wb.Worksheets)
             {
                 if (ws.Range[MyConditionRng].FormatConditions.Count > 0)
                 {
                     ws.Range[MyConditionRng].FormatConditions.Item(1).Delete();
                 }
             }
         }
         catch (Exception ex)
         {
             Interaction.MsgBox(ex.Message);
         }
     }

     private static void _xlapp_WorkbookOpen(Workbook Wb)
     {
         try
         {
             Worksheet ws = Wb.ActiveSheet;
             if (ws == null) return;
             FormatCondition fc = null;
             if (ws.Range[MyConditionRng].FormatConditions.Count == 0)
             {
                 fc = ws.Range[MyConditionRng].FormatConditions.Add(XlFormatConditionType.xlExpression, XlFormatConditionOperator.xlEqual,
                     "=OR(CELL(\"ROW\")=ROW(),CELL(\"COL\")=COLUMN())");
             }
             else fc = ws.Range[MyConditionRng].FormatConditions.Item(1);
             fc.SetFirstPriority();
             fc.Interior.Color = ColorTranslator.ToOle(Color.LightPink);
             fc.Font.Bold = true;
         }
         catch (Exception ex)
         {
             Interaction.MsgBox(ex.Message);
         }
     }
     private static void _xlapp_SheetSelectionChange(object Sh, Range Target)
     {
         _xlapp.ScreenUpdating = false;
         _xlapp.ScreenUpdating = true;
     }


     [ExcelCommand(MenuName = "拓展", MenuText = nameof(关闭聚光灯))]
     public static void 关闭聚光灯()
     {
         try
         {
             _xlapp.SheetSelectionChange -= _xlapp_SheetSelectionChange; ;
             _xlapp.WorkbookOpen -= _xlapp_WorkbookOpen;
             _xlapp.WorkbookBeforeClose -= _xlapp_WorkbookBeforeClose; ;
             foreach (Workbook item in _xlapp.Workbooks)
             {
                 foreach (Worksheet ws in item.Worksheets)
                 {
                     if (ws.Range[MyConditionRng].FormatConditions.Count > 0)
                     {
                         ws.Range[MyConditionRng].FormatConditions.Item(1).Delete();
                     }
                 }
             }
         }
         catch (Exception ex)
         {
             Interaction.MsgBox(ex.Message);
         }
     }
 }

 

标签:FormatConditions,C#,EXCEL,Range,xlapp,MyConditionRng,fc,ws,聚光灯
From: https://www.cnblogs.com/NanShengBlogs/p/18008813

相关文章

  • Springboot在编写CRUD时,访问对应数据函数返回null
    1.我遇到了什么问题我在学习springboot,其中在编写CRUD时发现访问数据的函数执行下去返回值是null但是其它部分正常。下面是我的错误代码pojopublicclassBot{@TableId(type=IdType.AUTO)privateIntegerid;privateIntegeruser_id;privateStr......
  • C#的事件与委托
    本文是学习B站的up主:十月的寒流的学习笔记,推荐直接观看原视频:C#的委托与事件大致是怎么一回事Action和Func是强类型委托,是dotnet为我们提供好的委托Action是没有返回值的Func是有返回值的事件是一种特殊的委托委托有什么用将函数作为函数的参数进行传递声明事件并注册......
  • CTT+CTS 游记
    游记写得比较混乱,都是流水账,大家可以当个乐子看看。NOIP把文件存在了桌面,喜提\(0\)分,参加不了省选了。于是,这就是我的最后一年了。CTT游记前面互测打得不错,所以还是比较有信心的。12.1到宾馆。室友是lcw。试机赛还是经典的三道题,半个小时就写完了。然后随便测了下速......
  • 视觉slam十四讲 ch3 三维刚体运动
    视觉slam十四讲---CH3三维刚体运动三维刚体运动,即三维空间下的刚体的运动。刚体,是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在运动过程中,机器人或者飞机和汽车的形变很小,可以近似看作刚体。三维刚体运动就是研究如何描述和表示一个刚体在......
  • sc2 天梯地图
    没记错的话以前7张ban3张,非常合理,现在9张怎么还是ban3张好哥哥达蒙星际2教学Goldenauraban三四矿近,挂运输机的地方长,架坦克的点位多,ZvT打不了一点Equilibriumban莫名其妙Hecate不敲岩石的话中间的路很窄偏大,没有瞭望塔,难以控图(注意偷矿,多线)主矿下面、二三......
  • React中的错误边界处理是指的哪些?
    React中的错误边界处理是指的哪些?在React中,错误边界(ErrorBoundaries)是一种React组件,它能够捕获并处理其子组件树任何位置上抛出的JavaScript错误,并且阻止这些错误导致整个应用崩溃。当一个错误边界内的子组件发生渲染错误、生命周期方法中的错误或其他同步错误时,错误边界会捕获......
  • docker设置国内镜像源
    一、国内加速地址1、阿里云镜像站:(需登录,免费)https://<your_code>.mirror.aliyuncs.com2、网易云镜像站:http://hub-mirror.c.163.com3、百度云镜像站:https://mirror.baidubce.com4、上海交大镜像站:https://docker.mirrors.sjtug.sjtu.edu.cn5、南京大学镜像站:https://doc......
  • PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框
    PowerShell是一种跨平台的任务自动化解决方案,包括命令行shell、脚本语言和配置管理框架。PowerShell提供了丰富的命令(称为cmdlet),可以用来执行许多Windows管理任务,包括但不限于用户和组管理、文件系统操作、进程和服务管理等。下面列举一些常见的net命令以及它们在PowerShell中的对......
  • 3.C语言学习--分支与循环例题分析2
    1.有三个数,将他们按照从大到小的顺序输出intmain(){ inta=0; intb=0; intc=0; scanf("%d%d%d",&a,&b,&c); inttmp=0; if(a<b) { tmp=a; a=b; b=tmp; } if(a<c) { tmp=a; a=c; c=tmp; } if(b<c)......
  • 执行truncate时报错:ORA-00054:资源正忙但指定以NOWAIT 方式获取资源或者超时失效,怎样
    在执行TRUNCATE语句时出现错误,可能是由于以下原因之一:表正在被其他会话使用:如果表正在被其他会话使用,您将无法执行TRUNCATE操作。请确保没有其他会话正在使用该表,并尝试再次执行TRUNCATE。权限不足:如果您没有足够的权限来执行TRUNCATE操作,则会收到错误消息。请确保您具有足......