2017-08-29 8 views
1

Open XML SDKを使用してWordのコンテンツコントロールに段落を挿入しようとしています。Wordのコンテンツコントロールにリッチテキストの段落を挿入する正しい方法は何ですか?

私のコードがうまくいくようです(段落は単語ファイルに表示されています)。ただし、コントロールコントロールは編集できません。新しいコンテンツを挿入する前に、コンテンツ全体を消去することしかできません。

手動でコピー/ペーストをコンテンツコントロールに模倣する方法はありますか。

FYI、ここに私のコードです:

var mainPart = package.MainDocumentPart; 

var sdtRuns = mainPart.Document.Descendants<SdtElement>().Where(run => run.SdtProperties.GetFirstChild<Tag>().Val.Value == "TagOfMyContentControl"); 

foreach (var sdtBlock in sdtRuns) 
{ 
    List<Paragraphs> paragraphs = GetParapraphsFromSomewhere(); 
    var contentControlParagraph = sdtBlock.Descendants<SdtContentBlock>().First(); 
    contentControlParagraph.RemoveAllChildren(); 
    contentControlParagraph.Append(paragraphs); 
} 

mainPart.Document.Save(); 

PS:私は、より一般的な方法、WordのML要素の目的と階層を説明する任意のリソースはありますか?

答えて

1

あなたのコードは、コンテンツコントロールに貼り付ける模倣コピーに近いです。次の2行は、あなたのコンテンツコントロール内の段落のすべてを削除している線です。

var contentControlParagraph = sdtBlock.Descendants<SdtContentBlock>().First(); 
contentControlParagraph.RemoveAllChildren(); 

代わりに、あなたはあなたの段落とそこAppendそれを配置したい場所を決定する必要があります。

たとえば、私は、CopyPasteCCという名前のリッチテキストコンテンツコントロールを持つdocxを持っています。この画像は、開発者モードの文書を示しています。コンテンツコントロールには3つの既存の段落があります。

enter image description here

その後、私は次のようにあなたのコードを置き換える:

 var mainPart = document.MainDocumentPart; 

     var sdtRuns = mainPart.Document.Descendants<SdtElement>().Where(run => run.SdtProperties.GetFirstChild<Tag>().Val.Value == "CopyPasteCC"); 

     sdtRuns.ElementAt(0).Descendants<Paragraph>().ElementAt(1).InsertAfterSelf(
      new Paragraph(new Run(new Text("Hello - this is new Copy Paste paragraph"))) 
      ); 

     mainPart.Document.Save(); 

3行目は二行目で見つかったコンテンツコントロール内の段落のすべてを選択します。次に、既存の2番目の段落の後に新しい段落を挿入します。 - あなたが読むことを試みることができる正式なOpenXML Specificationがある

enter image description here

をごPS質問に答えるために:このコードが実行された後、次の画像は、上記のファイルです。これは簡単な読書ではありませんが、権威ある仕様です。もっと一般的な(しかし日付)フリーの電子書籍OpenXml Explainedがあります。

これらについては、毎月1回情報を参照しています。 OpenXml Explainedの第1章にはWordprocessingMLがあり、39ページには、コンテンツコントロールの概要を示す構造化文書タグに関するセクションがあります。

関連する問題