Shapes 被分组到其他 Shapes 中,作为 GroupItems 集合中的一个项目。
using Word = Microsoft.Office.Interop.Word;
void DeleteShape(Word.Shape shp)
{
try
{
if (shp != null)
{
if ((int)shp.Type == 6 /* MsoShapeType.msoGroup */)
{
Debug.WriteLine($"Deleting shape group {shp.Name} with {shp.GroupItems.Count} items");
// it is not necessary to delete the group member shapes
}
Debug.WriteLine($"Deleting shape {shp.Name}");
shp.Delete();
}
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
简单地遍历形状集合来删除所有形状是行不通的。
var word = new Word.Application();
var doc = word.Documents.Open(@"C:\temp\doc1.docx");
// avoid problems deleting in current collection
var list = new List<Word.Shape>();
foreach(Word.Shape shape in word.ActiveDocument.Shapes)
{
list.Add(shape);
}
foreach (Word.Shape shape in list)
{
DeleteShape(shape);
}
如果删除当前的Shape 项目,则集合会损坏。您可以反向遍历集合,也可以将Shape 项复制到另一个集合中。