您的位置:首页 > 科技 > IT业 > 【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondScale.cs

【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondScale.cs

2024/10/6 12:20:49 来源:https://blog.csdn.net/hmywillstronger/article/details/141537499  浏览:    关键词:【C#】【EXCEL】BumblebeeComponentsAnalysisGH_Ex_Ana_CondScale.cs

这段代码定义了一个名为 GH_Ex_Ana_CondScale 的类,它是一个 Grasshopper 组件,用于在 Excel 工作表中添加基于相对值的条件格式颜色。以下是该组件的主要功能和介绍:

  1. 功能概述:

    • 这个组件用于在 Excel 中为指定范围的单元格添加条件格式,根据单元格的相对值来应用颜色渐变。
    • 它可以应用两色或三色渐变,根据用户的输入来决定。
  2. 主要特性:

    • 可以指定工作表和单元格范围
    • 支持两色或三色渐变
    • 可以自定义渐变的颜色
    • 可以设置三色渐变的中点参数
    • 提供清除现有条件格式的选项
    • 包含激活/停用条件格式的开关
  3. 输入参数:

    • 工作表和范围
    • 渐变中点参数(用于三色渐变)
    • 渐变颜色(最多三种颜色)
    • 清除现有条件的布尔值
    • 激活条件格式的布尔值
  4. 输出:

    • 应用了条件格式的 Excel 范围
  5. 使用场景:
    这个组件适用于需要在 Excel 中可视化数据分布的情况。例如:

    • 突出显示销售数据中的高值和低值
    • 可视化温度或其他测量数据的分布
    • 在财务报表中高亮显示重要数值
  6. 特殊说明:

    • 这个组件是 Grasshopper 插件的一部分,专门用于 Excel 数据处理和可视化
    • 它继承自 GH_Ex_Rng__Base 类,可能是一个自定义的基类
    • 组件的曝光级别被设置为次要(secondary),表明它可能不是最常用的功能,但在特定情况下很有用

总的来说,这个组件为用户提供了一种简便的方法来在 Grasshopper 环境中为 Excel 数据添加高级的条件格式,增强了数据的可视化效果和可读性。

Flow diagram

这个流程图将展示 GH_Ex_Ana_CondScale 类中 SolveInstance 方法的主要流程。

是/Yes
是/Yes
否/No
否/No
是/Yes
否/No
开始 / Start
获取工作表和范围 / Get worksheet and range
获取输入参数 / Get input parameters
是否激活? / Activate?
是否清除? / Clear?
清除现有条件 / Clear existing conditions
是否为三色? / Is three-color?
设置输出 / Set output
添加三色条件格式 / Add three-color conditional formatting
添加双色条件格式 / Add two-color conditional formatting
结束 / End

这个流程图对应到代码中的主要步骤如下:

  1. 开始 (Start):SolveInstance 方法开始。

  2. 获取工作表和范围 (Get worksheet and range):

    IGH_Goo gooS = null;
    DA.GetData(0, ref gooS);
    ExWorksheet worksheet = new ExWorksheet();
    bool hasWs = gooS.TryGetWorksheet(ref worksheet);IGH_Goo gooR = null;
    DA.GetData(1, ref gooR);
    ExRange range = new ExRange();
    if (!gooR.TryGetRange(ref range, worksheet)) return;
    if (!hasWs) worksheet = range.Worksheet;
    
  3. 获取输入参数 (Get input parameters):

    double mid = 0.5;
    DA.GetData(2, ref mid);
    Sd.Color a = Sd.Color.LightGray;
    DA.GetData(3, ref a);
    Sd.Color b = Sd.Color.Gray;
    DA.GetData(4, ref b);
    Sd.Color c = Sd.Color.DarkGray;
    bool isThree = DA.GetData(5, ref c);
    bool clear = false;
    DA.GetData(6, ref clear);
    bool activate = false;
    DA.GetData(7, ref activate);
    
  4. 是否激活? (Activate?):

    if (activate)
    {// ...
    }
    
  5. 是否清除? (Clear?):

    if (clear) range.ClearConditions();
    
  6. 是否为三色? (Is three-color?):

    if (isThree)
    {range.AddConditionalScale(a,b,c,mid);
    }
    else
    {range.AddConditionalScale(a, b);
    }
    
  7. 设置输出 (Set output):

    DA.SetData(0, range);
    
  8. 结束 (End):SolveInstance 方法结束。

这个流程图清晰地展示了 SolveInstance 方法的主要逻辑流程,包括条件判断和主要操作步骤。

Description

  1. 构造函数
public GH_Ex_Ana_CondScale(): base("Conditional Scale", "Scale","Add conditional formatting colors to a Range based on relative values",Constants.ShortName, Constants.SubAnalysis)
{
}

中文注释:

/// <summary>
/// 初始化 GH_Ex_Ana_CondScale 类的新实例。
/// 这个构造函数设置了组件的名称、昵称、描述和分类。
/// </summary>
public GH_Ex_Ana_CondScale(): base("Conditional Scale", "Scale","基于相对值为范围添加条件格式颜色",Constants.ShortName, Constants.SubAnalysis)
{
}

解释:
这个构造函数初始化了 GH_Ex_Ana_CondScale 类的实例。它调用基类构造函数,设置组件的名称(“Conditional Scale”)、昵称(“Scale”)、描述和分类。这些信息将在 Grasshopper 界面中显示,帮助用户理解组件的功能。

  1. Exposure 属性
public override GH_Exposure Exposure
{get { return GH_Exposure.secondary; }
}

中文注释:

/// <summary>
/// 设置组件的曝光级别。
/// 返回 secondary 表示这是一个次要的或不太常用的组件。
/// </summary>
public override GH_Exposure Exposure
{get { return GH_Exposure.secondary; }
}

解释:
这个属性定义了组件在 Grasshopper 界面中的曝光级别。GH_Exposure.secondary 表示这是一个次要的组件,可能不会在主工具栏中直接显示,但可以在子菜单或搜索中找到。

  1. RegisterInputParams 方法
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{base.RegisterInputParams(pManager);pManager[1].Optional = true;pManager.AddNumberParameter("Parameter", "P", "The parameter of the midpoint of a 3 color gradient", GH_ParamAccess.item, 0.5);// ... (其他参数注册)
}

中文注释和解释:

/// <summary>
/// 注册所有输入参数。
/// 这个方法定义了组件接受的所有输入。
/// </summary>
/// <param name="pManager">参数管理器,用于添加和配置输入参数</param>
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{// 调用基类方法注册基本参数(通常是工作表和范围)base.RegisterInputParams(pManager);// 设置第二个参数(索引1)为可选pManager[1].Optional = true;// 添加中点参数(用于三色渐变)// AddNumberParameter: 添加数字类型参数// Parameters: 名称, 昵称, 描述, 访问类型, 默认值pManager.AddNumberParameter("Parameter", "P", "三色渐变的中点参数", GH_ParamAccess.item, 0.5);// ... (添加其他参数,如颜色、清除选项、激活选项等)
}

这个方法注册了组件的所有输入参数。它首先调用基类方法来注册一些基本参数,然后添加特定于这个组件的参数。每个参数都有名称、昵称、描述、访问类型和默认值(如果适用)。

  1. RegisterOutputParams 方法
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{base.RegisterOutputParams(pManager);
}

中文注释:

/// <summary>
/// 注册所有输出参数。
/// 在这个例子中,它只是调用基类方法来注册标准输出。
/// </summary>
/// <param name="pManager">参数管理器,用于添加和配置输出参数</param>
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{base.RegisterOutputParams(pManager);
}

解释:
这个方法注册组件的输出参数。在这个特定的实现中,它只是调用基类方法,这意味着它可能只输出一个标准的 Excel 范围对象。

  1. SolveInstance 方法

这是组件的核心方法,执行主要的逻辑。由于这个方法较长,我会分几个部分来解释。

a. 获取输入数据:

protected override void SolveInstance(IGH_DataAccess DA)
{// 获取工作表IGH_Goo gooS = null;DA.GetData(0, ref gooS);ExWorksheet worksheet = new ExWorksheet();bool hasWs = gooS.TryGetWorksheet(ref worksheet);// 获取范围IGH_Goo gooR = null;DA.GetData(1, ref gooR);ExRange range = new ExRange();if (!gooR.TryGetRange(ref range, worksheet)) return;if (!hasWs) worksheet = range.Worksheet;// 获取其他参数double mid = 0.5;DA.GetData(2, ref mid);// ... (获取颜色和其他参数)

中文注释和解释:

/// <summary>
/// 执行组件的主要逻辑。
/// 这个方法获取所有输入数据,处理它们,然后设置输出。
/// </summary>
/// <param name="DA">数据访问对象,用于获取输入和设置输出</param>
protected override void SolveInstance(IGH_DataAccess DA)
{// 获取工作表输入IGH_Goo gooS = null;DA.GetData(0, ref gooS);ExWorksheet worksheet = new ExWorksheet();bool hasWs = gooS.TryGetWorksheet(ref worksheet);// 获取范围输入IGH_Goo gooR = null;DA.GetData(1, ref gooR);ExRange range = new ExRange();if (!gooR.TryGetRange(ref range, worksheet)) return;if (!hasWs) worksheet = range.Worksheet;// 获取中点参数double mid = 0.5;DA.GetData(2, ref mid);// ... (获取颜色和其他参数)

这部分代码从输入参数中获取必要的数据,包括 Excel 工作表、单元格范围和其他参数(如颜色、中点值等)。它使用 DA.GetData 方法来获取每个输入参数的值。

b. 处理条件格式:

if (activate)
{if (clear) range.ClearConditions();if (isThree){range.AddConditionalScale(a,b,c,mid);}else{range.AddConditionalScale(a, b);}
}

中文注释和解释:

// 如果激活标志为真,应用条件格式
if (activate)
{// 如果清除标志为真,先清除现有的条件格式if (clear) range.ClearConditions();// 根据是否使用三色渐变来添加相应的条件格式if (isThree){// 添加三色条件格式// AddConditionalScale: 为范围添加条件格式比例尺// Parameters: 颜色1, 颜色2, 颜色3, 中点值range.AddConditionalScale(a, b, c, mid);}else{// 添加两色条件格式// Parameters: 颜色1, 颜色2range.AddConditionalScale(a, b);}
}

这部分是方法的核心逻辑。它首先检查是否需要激活条件格式。如果需要,它会根据用户的输入清除现有的条件格式,然后根据是使用两色还是三色渐变来添加新的条件格式。

c. 设置输出:

DA.SetData(0, range);

中文注释:

// 设置输出数据
// SetData: 将处理后的范围对象设置为组件的输出
DA.SetData(0, range);

这行代码将处理后的 Excel 范围对象设置为组件的输出。

  1. Icon 属性
protected override System.Drawing.Bitmap Icon
{get{return Properties.Resources.BB_Cond_Scale_01;}
}

中文注释:

/// <summary>
/// 提供组件的图标。
/// 这个图标将在 Grasshopper 界面中显示。
/// </summary>
protected override System.Drawing.Bitmap Icon
{get{// 返回预定义的图标资源return Properties.Resources.BB_Cond_Scale_01;}
}

这个属性返回组件在 Grasshopper 界面中使用的图标。

  1. ComponentGuid 属性
public override Guid ComponentGuid
{get { return new Guid("7c251907-0e3b-4c57-b948-98ea7c76b68f"); }
}

中文注释:

/// <summary>
/// 获取此组件的唯一标识符。
/// 这个 GUID 在发布后不应更改,用于识别组件。
/// </summary>
public override Guid ComponentGuid
{get { return new Guid("7c251907-0e3b-4c57-b948-98ea7c76b68f"); }
}

这个属性返回组件的全局唯一标识符(GUID)。每个 Grasshopper 组件都需要一个唯一的 GUID 来区分它们。

总结:
这个类实现了一个 Grasshopper 组件,用于在 Excel 中添加基于相对值的条件格式颜色。它展示了如何创建一个自定义的 Grasshopper 组件,包括设置输入和输出参数、处理数据、应用特定的 Excel 功能,以及提供必要的元数据(如图标和GUID)。这个组件的设计允许用户灵活地应用两色或三色渐变条件格式,为数据可视化提供了强大的工具。

Code:

using Grasshopper.Kernel;
using Grasshopper.Kernel.Parameters;
using Grasshopper.Kernel.Types;
using Rhino.Geometry;
using System;
using System.Collections.Generic;
using Sd = System.Drawing;namespace Bumblebee.Components
{/// <summary>/// GH_Ex_Ana_CondScale 类定义了一个 Grasshopper 组件,/// 用于在 Excel 范围内添加基于相对值的条件格式颜色。/// </summary>public class GH_Ex_Ana_CondScale : GH_Ex_Rng__Base{/// <summary>/// 初始化 GH_Ex_Ana_CondScale 类的新实例。/// </summary>public GH_Ex_Ana_CondScale(): base("Conditional Scale", "Scale","Add conditional formatting colors to a Range based on relative values",Constants.ShortName, Constants.SubAnalysis){}/// <summary>/// 设置组件的曝光级别。/// GH_Exposure.secondary 表示这是一个次要的或不太常用的组件。/// </summary>public override GH_Exposure Exposure{get { return GH_Exposure.secondary; }}/// <summary>/// 注册所有的输入参数。/// </summary>/// <param name="pManager">用于添加和配置输入参数的参数管理器</param>protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager){// 调用基类方法注册基本参数(通常是工作表和范围)base.RegisterInputParams(pManager);// 设置第二个参数为可选pManager[1].Optional = true;// 添加中点参数(用于三色渐变)pManager.AddNumberParameter("Parameter", "P", "The parameter of the midpoint of a 3 color gradient", GH_ParamAccess.item, 0.5);pManager[2].Optional = true;// 添加第一个渐变颜色pManager.AddColourParameter("Gradient Color 1", "C0", "The first color of the gradient", GH_ParamAccess.item, Sd.Color.LightGray);pManager[3].Optional = true;// 添加第二个渐变颜色pManager.AddColourParameter("Gradient Color 2", "C1", "The second color of the gradient", GH_ParamAccess.item, Sd.Color.Gray);pManager[4].Optional = true;// 添加第三个渐变颜色(可选)pManager.AddColourParameter("Gradient Color 3", "C2", "The third color of the gradient", GH_ParamAccess.item);pManager[5].Optional = true;// 添加清除现有条件的布尔参数pManager.AddBooleanParameter("Clear", "_X", "If true, the existing conditions will be cleared", GH_ParamAccess.item, false);pManager[6].Optional = true;// 添加激活条件的布尔参数pManager.AddBooleanParameter("Activate", "_A", "If true, the condition will be applied", GH_ParamAccess.item, false);pManager[7].Optional = true;}/// <summary>/// 注册所有的输出参数。/// </summary>/// <param name="pManager">用于添加和配置输出参数的参数管理器</param>protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager){// 调用基类方法注册标准输出(通常是修改后的 Excel 范围)base.RegisterOutputParams(pManager);}/// <summary>/// 这是执行实际工作的方法。/// </summary>/// <param name="DA">用于检索输入和存储输出的 DA 对象</param>protected override void SolveInstance(IGH_DataAccess DA){// 获取工作表输入IGH_Goo gooS = null;DA.GetData(0, ref gooS);ExWorksheet worksheet = new ExWorksheet();bool hasWs = gooS.TryGetWorksheet(ref worksheet);// 获取范围输入IGH_Goo gooR = null;DA.GetData(1, ref gooR);ExRange range = new ExRange();if (!gooR.TryGetRange(ref range, worksheet)) return;if (!hasWs) worksheet = range.Worksheet;// 获取中点参数double mid = 0.5;DA.GetData(2, ref mid);// 获取第一个颜色Sd.Color a = Sd.Color.LightGray;DA.GetData(3, ref a);// 获取第二个颜色Sd.Color b = Sd.Color.Gray;DA.GetData(4, ref b);// 获取第三个颜色(如果提供)Sd.Color c = Sd.Color.DarkGray;bool isThree = DA.GetData(5, ref c);// 获取清除标志bool clear = false;DA.GetData(6, ref clear);// 获取激活标志bool activate = false;DA.GetData(7, ref activate);// 如果激活,应用条件格式if (activate){// 如果需要,清除现有条件if (clear) range.ClearConditions();// 根据是否为三色渐变添加相应的条件格式if (isThree){range.AddConditionalScale(a,b,c,mid);}else{range.AddConditionalScale(a, b);}}// 设置输出(修改后的范围)DA.SetData(0, range);}/// <summary>/// 提供组件的图标。/// </summary>protected override System.Drawing.Bitmap Icon{get{// 返回组件的图标return Properties.Resources.BB_Cond_Scale_01;}}/// <summary>/// 获取此组件的唯一 ID。发布后不要更改此 ID。/// </summary>public override Guid ComponentGuid{get { return new Guid("7c251907-0e3b-4c57-b948-98ea7c76b68f"); }}}
}

这些注释详细解释了代码的每个主要部分,包括:

  1. 类的整体目的
  2. 构造函数的作用
  3. 各种属性和方法的功能
  4. 输入参数的注册和说明
  5. 主要逻辑(SolveInstance 方法)中的每个步骤
  6. 图标和 GUID 的作用

这种详细的注释不仅有助于理解代码的结构和功能,还为其他开发者提供了有价值的上下文信息。您可以重点解释一些关键概念,如:

  • Grasshopper 组件的基本结构
  • 如何处理 Excel 相关的操作
  • 条件格式的实现方式
  • 参数的注册和处理
  • 组件的可视化元素(如图标)的重要性

努力学习 Grasshopper 插件开发和 Excel 自动化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com