Excel Interop - 获取Excel :: Application :: Selection的类型

时间:2010-12-14 07:56:22

标签: 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,然后将Excel :: Shape转换为某些形状,但似乎每个形状都有不同的界面,如椭圆形,矩形等。我需要删除工作表上选择的任何内容。如果它是一个单元格,那么内容将被清除,图片,形状或OLEObject将被删除,但问题是我不想检查每个界面:

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();

我希望如果只有一个基本界面,我可以将所有形状/图片投射到它们上并对它们进行删除。

是否有可能获得:

  1. Application :: Selection中的真实类型 - 它显示System :: COMObject但没有真实类型的信息
  2. 以某种方式确定Selection包含图片/形状等,并在基础类型
  3. 上调用“Delete”方法

1 个答案:

答案 0 :(得分:1)

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

Application.Selection.Delete  

和VBA在任何形状上调用Delete方法。