EXCEL C# 聚光灯

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

public static class Extension
{
static Application _xlapp = (Application)ExcelDnaUtil.Application;
static AppEvents_Event AppEvents = (AppEvents_Event)ExcelDnaUtil.Application;
public const string MyConditionRng = "$1:$1048576";
public static Color HighLightColor = Color.LightBlue;
[ExcelCommand(MenuName = "拓展", MenuText = nameof(开启聚光灯))]
public static void 开启聚光灯()
{
try
{
_xlapp.SheetSelectionChange += _xlapp_SheetSelectionChange; ;
_xlapp.WorkbookOpen += _xlapp_WorkbookOpen;
_xlapp.WorkbookBeforeClose += _xlapp_WorkbookBeforeClose; ;
_xlapp.WorkbookNewSheet += _xlapp_WorkbookNewSheet;
AppEvents.NewWorkbook += AppEvents_NewWorkbook;
if (_xlapp.Workbooks.Count == 0) return;
foreach (Workbook item in _xlapp.Workbooks)
{
foreach (Worksheet ws in item.Worksheets)
{
ws.AddSheetFormatCondition(HighLightColor);
}
}
}
catch (Exception ex)
{
Interaction.MsgBox(ex.Message);
}
}
private static void AppEvents_NewWorkbook(Workbook Wb)
{
try
{
foreach (Workbook item in _xlapp.Workbooks)
{
foreach (Worksheet ws in item.Worksheets)
{
ws.AddSheetFormatCondition(HighLightColor);
}
}
}
catch (Exception ex)
{
Interaction.MsgBox(ex.Message);
}
}
private static void _xlapp_WorkbookNewSheet(Workbook Wb, object Sh)
{
try
{
Worksheet ws = Sh as Worksheet;
ws?.AddSheetFormatCondition(HighLightColor);
}
catch (Exception ex)
{
Interaction.MsgBox(ex.Message);
}
}
private static void _xlapp_WorkbookBeforeClose(Workbook Wb, ref bool Cancel)
{
try
{
foreach (Worksheet ws in Wb.Worksheets)
{
ws.CancelSheetFormatCondition();
}
}
catch (Exception ex)
{
Interaction.MsgBox(ex.Message);
}
}
private static void _xlapp_WorkbookOpen(Workbook Wb)
{
try
{
foreach (Worksheet ws in Wb.Worksheets)
{
ws.AddSheetFormatCondition(HighLightColor);
}
}
catch (Exception ex)
{
Interaction.MsgBox(ex.Message);
}
}
private static void _xlapp_SheetSelectionChange(object Sh, Range Target)
{
_xlapp.ScreenUpdating = false;
_xlapp.ScreenUpdating = true;
}
private static void AddSheetFormatCondition(this Worksheet ws, Color _color)
{
try
{
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);
fc.Font.Bold = true;
}
catch (Exception ex)
{
Interaction.MsgBox(ex.Message);
}
}
private static void CancelSheetFormatCondition(this Worksheet ws)
{
try
{
if (ws == null) return;
var rng = ws.Range[MyConditionRng];
if (rng != null)
{
if (rng.FormatConditions.Count > 0)
rng.FormatConditions.Item(1).Delete();
}
else return;
}
catch (Exception )
{
}
}
[ExcelCommand(MenuName = "拓展", MenuText = nameof(关闭聚光灯))]
public static void 关闭聚光灯()
{
try
{
_xlapp.SheetSelectionChange -= _xlapp_SheetSelectionChange; ;
_xlapp.WorkbookOpen -= _xlapp_WorkbookOpen;
_xlapp.WorkbookBeforeClose -= _xlapp_WorkbookBeforeClose;
_xlapp.WorkbookNewSheet -= _xlapp_WorkbookNewSheet;
AppEvents.NewWorkbook -= AppEvents_NewWorkbook;
foreach (Workbook item in _xlapp.Workbooks)
{
foreach (Worksheet ws in item.Worksheets)
{
ws.CancelSheetFormatCondition();
}
}
}
catch (Exception ex)
{
Interaction.MsgBox(ex.Message);
}
}
}

 

posted @   南胜NanSheng  阅读(181)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示