Search code examples
c#.netms-wordoffice-interop

COM Word --> Get all ContentControls


I want to get all ContentControls of a Word-Document. Currently I use following function to do this.

    private static List<ContentControl> GetAllContentControls(Document wordDocument)
    {
        if (null == wordDocument)
            throw new ArgumentNullException("wordDocument");

        List<ContentControl> ccList = new List<ContentControl>();

        Range rangeStory;
        foreach (Range range in wordDocument.StoryRanges)
        {
            rangeStory = range;
            do
            {
                try
                {
                    foreach (ContentControl cc in rangeStory.ContentControls)
                    {
                        ccList.Add(cc);
                    }
                }
                catch (COMException) { }
                rangeStory = rangeStory.NextStoryRange;

            }
            while (rangeStory != null);
        }
        return ccList;
    }

The Problem is to get Contentcontrols in text-fields, too.


Solution

  • I got it

        private static List<ContentControl> GetAllContentControls(Document wordDocument)
        {
            if (null == wordDocument)
                throw new ArgumentNullException("wordDocument");
    
            List<ContentControl> ccList = new List<ContentControl>();
    
            Range rangeStory;
            foreach (Range range in wordDocument.StoryRanges)
            {
                rangeStory = range;
                do
                {
                    try
                    {
                        foreach (ContentControl cc in rangeStory.ContentControls)
                        {
                            ccList.Add(cc);
                        }
    
                        foreach (Shape shapeRange in rangeStory.ShapeRange)
                        {
                            foreach (ContentControl cc in shapeRange.TextFrame.TextRange.ContentControls)
                            {
                                ccList.Add(cc);
                            }
                        }
                    }
                    catch (COMException) { }
                    rangeStory = rangeStory.NextStoryRange;
    
                }
                while (rangeStory != null);
            }
            return ccList;
        }