我正在为Excel开发一个C#文档级自定义VSTO。在它中,我会看到一些工作表中包含了一些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方法 (和属性)的MS列表,唯一能找到的是Excel.Worksheet.Pictures,它包含了一个可爱的注释:
此API支持Visual基础结构,不打算直接从代码中使用。
所以现在我又回到了我最初的问题,我如何获得包含在工作表中的图像?我有什么明显的遗漏吗?
我目前的解决办法是可以VBA微型,但这是非常麻烦。如果可能的话,我宁愿在C#中处理这一切,以避免任何VBA。
如果我有超过一张图片在纸上,我可以运行:
Excel.Worksheet TempSheet = Globals.ThisWorkbook.Worksheets(IndexVar);
foreach (void XXX in TempSheet.Pictures) {
if (XXX.Index > 1) {
XXX.Delete();
}
}
这会留下一个图像(我猜是基于1而不是0的计数)
但如果我试着:
Excel.Worksheet TempSheet = Globals.ThisWorkbook.Worksheets(IndexVar);
foreach (void XXX in TempSheet.Pictures) {
XXX.Delete();
}
然后它会导致Excel崩溃。
发布于 2015-10-05 13:10:00
我不是VSTO的用户,但在删除索引高于1的所有图片时,似乎只剩下一张图片。我建议更改这一行:
if (XXX.Index > 1) {
至:
if (XXX.Index >= 1) {
希望它现在能删除所有的东西。
发布于 2015-12-19 05:11:54
首先确定图片的计数和删除。
下面的代码行将帮助您识别工作集中图片的计数。
WorkSheet.Pictures().Count
https://stackoverflow.com/questions/32957240
复制