Excel互操作-获取Excel::Application::Selection的类型

Excel互操作-获取Excel::Application::Selection的类型,excel,excel-interop,Excel,Excel Interop,在Excel中选择某个对象时,Excel::Application::Selection属性包含所选对象。例如,如果我选择某个单元格,我可以使用以下命令轻松将其转换为Excel::Range: Excel.Range cells = Excel.Application.Selection as Excel.Range 其中Excel=Microsoft.Office.Interop.Excel 现在,当选择一些图片时,我必须将其转换为Excel::picture,然后在某些形状的情况下转换为E

在Excel中选择某个对象时,Excel::Application::Selection属性包含所选对象。例如,如果我选择某个单元格,我可以使用以下命令轻松将其转换为Excel::Range:

Excel.Range cells = Excel.Application.Selection as Excel.Range
其中Excel=Microsoft.Office.Interop.Excel

现在,当选择一些图片时,我必须将其转换为Excel::picture,然后在某些形状的情况下转换为Excel::Shape,但似乎每个形状都有不同的界面,如椭圆形、矩形等。我需要删除工作表上选择的任何内容。如果是单元格,则内容将被清除,图片、形状或对象将被删除,但问题是我不想检查每个界面:

if (null != ThisApplication.Selection as Excel.Shape)
    (ThisApplication.Selection as Excel.Shape).Delete();
else if (null != ThisApplication.Selection as Excel.Picture)
    (ThisApplication.Selection as Excel.Picture).Delete();
else if (null != ThisApplication.Selection as Excel.OLEObject)
    (ThisApplication.Selection as Excel.OLEObject).Delete();
我希望如果只有一个基本界面,我可以将所有形状/图片投射到其中,并调用delete

是否有可能获得:

  • Application::Selection中的真实类型-它显示System::COMObject,但不显示关于真实类型的信息
  • 以某种方式确定所选内容包含图片/形状等,并对基础类型调用“Delete”方法

  • 这就是我解决问题的方法。答案是在VBA中使用后期绑定。我们使用Application.Run(…)方法从C#addin中调用VBA宏。VBA宏仅执行以下代码:

    Application.Selection.Delete  
    
    VBA对任何形状都调用Delete方法