私はinteropを使用しています。単語の文書に含まれるすべてのコンテンツコントロール(本文、図形、ヘッダー、フッターなど)のリストを取得したいと考えています。これは正解であり、これを行うには最良の方法ですか:文書内のすべてのコンテンツコントロールのリストを取得する方法は?
よろしくお願いします。
私はinteropを使用しています。単語の文書に含まれるすべてのコンテンツコントロール(本文、図形、ヘッダー、フッターなど)のリストを取得したいと考えています。これは正解であり、これを行うには最良の方法ですか:文書内のすべてのコンテンツコントロールのリストを取得する方法は?
よろしくお願いします。
ここで(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
これを行うには正しい方法です:
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;
}
よろしく
はい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;
}
ありがとうございます
これは_all_コンテンツコントロールを見つけることが保証されていません。私のテストでは、ヘッダーのテキストボックス内に2つのコンテンツコントロールがありませんでした。 –