2011-01-05 9 views

答えて

7

ここで(VBAますが、C#のに移植することができます)、それについて行くのはるかに短い方法です。ここで

Sub GetCCs() 
    Dim d As Document 
    Set d = ActiveDocument 
    Dim cc As ContentControl 
    Dim sr As Range 
    Dim srs As StoryRanges 
    For Each sr In d.StoryRanges 
     For Each cc In sr.ContentControls 
      ''# do your thing 
     Next 
    Next 
End Sub 
-1

これを行うには正しい方法です:

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

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

    // The code below search content controls in all 
    // word document stories see http://word.mvps.org/faqs/customization/ReplaceAnywhere.htm 
    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; 
} 

よろしく

+3

これは_all_コンテンツコントロールを見つけることが保証されていません。私のテストでは、ヘッダーのテキストボックス内に2つのコンテンツコントロールがありませんでした。 –

4

はいLars Holm、あなたが正しいです、ヘッダーとフッターのテキストボックス内のコンテンツコントロールが見つからない場合、ここにはこれに対する完全な解決策があります:

/// <summary> 
/// Get all content controls contained in the document. 
/// </summary> 
/// <param name="wordDocument"></param> 
/// <returns></returns> 
public static List<ContentControl> GetAllContentControls(Document wordDocument) 
{ 
    if (null == wordDocument) 
     throw new ArgumentNullException("wordDocument"); 

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

    // The code below search content controls in all 
    // word document stories see http://word.mvps.org/faqs/customization/ReplaceAnywhere.htm 
    Range rangeStory; 
    foreach (Range range in wordDocument.StoryRanges) 
    { 
     rangeStory = range; 
     do 
     { 
      try 
      { 
       foreach (ContentControl cc in range.ContentControls) 
       { 
        ccList.Add(cc); 
       } 

       // Get the content controls in the shapes ranges 
       foreach (Shape shape in range.ShapeRange) 
       { 
        foreach (ContentControl cc in shape.TextFrame.TextRange.ContentControls) 
        { 
         ccList.Add(cc); 
        } 

       } 
      } 
      catch (COMException) { } 
      rangeStory = rangeStory.NextStoryRange; 

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

ありがとうございます