我正在使用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崩溃。
答案 0 :(得分:0)
我不是VSTO的用户,但是当你删除索引大于1的所有图片时,似乎剩下一张图片。 我建议改变这一行:
if (XXX.Index > 1) {
为:
if (XXX.Index >= 1) {
希望它现在全部删除。
答案 1 :(得分:-2)
首先识别图片计数并删除。
以下代码行将帮助您识别工作集中的图片数量。
WorkSheet.Pictures()。计数