我正在为 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/