c# - 如何在 C# 中从 Excel.Worksheet 中删除图像

标签 c# excel vba vsto

我正在为 Excel 开发 C# 文档级自定义 VSTO。在其中,我会遇到一些工作表,其中包含一些 Bitmaps

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

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

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

但遗憾的是 Worksheet.Pictures 没有可用的方法或属性。接下来,我想我可以在 Worksheet.OLEObjects 中找到它们,但即使逐一查看该集合,我发现图像并没有存储在那里。

然后我试图仔细查看 Excel.Worksheet methods 的 MS 列表(和属性),我能找到的唯一接近的是 Excel.Worksheet.Pictures ,其中包含可爱的注释:

This API supports the Visual Studio infrastructure and is not intended to be used directly from your code.

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

我目前的解决方法是可以使用 VBA 微程序,但这非常麻烦。如果可能的话,我宁愿用 C# 来处理这一切以避免任何 VBA。

如果工作表中有超过 1 张图片,我可以运行:

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 崩溃。

最佳答案

我不是 VSTO 的用户,但您似乎只剩下一张图片,因为您正在删除所有索引大于 1 的图片。 我建议更改此行:

if (XXX.Index > 1) {

到:

if (XXX.Index >= 1) {

希望它现在会全部删除。

关于c# - 如何在 C# 中从 Excel.Worksheet 中删除图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32957240/

相关文章:

vba - 在图表中定位标签

c# - Page head 元素中的尖括号

c# - 直接调用电话 Xamarin.Forms

xml - 是否可以在 Microsoft 文档中存储自定义数据?

vba - Excel:突出显示完全匹配的重复项

arrays - Excel VBA : What is the Maximum Number of String Elements that can be Stored in an Array

postgresql - 从 VBA MS-ACCESS 在 PostgreSQL 数据库中插入值

java - 如何使用 Azure 在 Java 或 Android 中使用 Microsoft Translator API

c# - 索引超出数组范围 - NHibernate 3.2

python - csv表格数据处理题