如何从C#中的Excel.Worksheet中删除图像

我正在处理一个C#文档级定制VSTO for Excel。 其中,我会遇到一些工作表,其中有一些Bitmaps放入其中。

清除它们的最好方法是什么?

在VBA中,答案就像获得一个Worksheet对象一样简单,然后调用方法WorksheetX.Pictures.Clear() 。 我尝试了一种直接的C#翻译:

 Excel.Worksheet TempSheet = Globals.ThisWorkbook.Worksheets(IndexVar); TempSheet.Pictures.Clear(); 

但不幸的是Worksheet.Pictures没有可用的方法或属性。 我接下来以为我可以在Worksheet.OLEObjectsfind它们,但是即使经过1集合,我发现那里没有存储的图像。

然后,我试着仔细看看Excel.Worksheet方法 (和属性)的MS列表,唯一能find的是Excel.Worksheet.Pictures ,其中包含可爱的注释:

此API支持Visual Studio基础结构,不能直接在您的代码中使用。

所以现在我回到我原来的问题,我如何获得工作表中包含的图像? 有什么明显的我失踪?

我目前的解决方法是可以VBA微,但是这是非常麻烦的。 如果可能的话,我宁愿在C#中处理所有的VBA。

如果我在表单中有多个图片,我可以运行:

 Excel.Worksheet TempSheet = Globals.ThisWorkbook.Worksheets(IndexVar); foreach (void XXX in TempSheet.Pictures) { if (XXX.Index > 1) { XXX.Delete(); } } 

这将留下1图像(我猜这是基于1而不是基于计数)

但是,如果我只是尝试:

 Excel.Worksheet TempSheet = Globals.ThisWorkbook.Worksheets(IndexVar); foreach (void XXX in TempSheet.Pictures) { XXX.Delete(); } 

然后它导致Excel崩溃。

我不是VSTO的用户,但是当您删除索引大于1的所有图片时,似乎留下了一张图片。我build议更改此行:

 if (XXX.Index > 1) { 

至:

 if (XXX.Index >= 1) { 

希望它现在将全部删除。

首先识别图片数量并删除。

下面的代码行将帮助您识别workseet中的图片数量。

WorkSheet.Pictures()。计数