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

时间:2015-10-05 20:21:16

标签: c# excel vba vsto

我正在使用C#文档级自定义VSTO for Excel。在其中,我会遇到一些工作表,其中有一些Bitmaps

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

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

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

但遗憾的是Worksheet.Pictures没有可用的方法或属性。我接下来认为我可以在Worksheet.OLEObjects中找到它们,但即使经过1个1的收集,我发现那些没有存储在那里的图像。

然后我试着仔细看看Excel.Worksheet methods(和属性)的MS列表,我唯一能找到的是Excel.Worksheet.Pictures,它包含了可爱的注释:< / p>

  

此API支持Visual Studio基础结构,但并非如此   直接从您的代码中使用。

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

我目前的解决方法是可以使用VBA micro,但这非常麻烦。我宁愿在C#中处理它,以避免任何VBA。

如果表格中有多张图片,我可以运行:

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

这将留下1张图片(我猜它基于1而不是基于0的计数)

但如果我只是尝试:

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

        XXX.Delete();

}

然后它会导致Excel崩溃。

2 个答案:

答案 0 :(得分:0)

我不是VSTO的用户,但是当你删除索引大于1的所有图片时,似乎剩下一张图片。 我建议改变这一行:

if (XXX.Index > 1) {

为:

if (XXX.Index >= 1) {

希望它现在全部删除。

答案 1 :(得分:-2)

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

以下代码行将帮助您识别工作集中的图片数量。

WorkSheet.Pictures()。计数