2017-02-27 3 views
0

段落にwordprocessing InsertAtメソッドを使用しようとしていますが、このメソッドを使用すると段落スタイルが常にnullに設定されていました。私は、私が使用していたインデックス0がParagraphPropertiesのためにあり、Runがインデックス1にあることを発見しました。ただし、パラグラフプロパティが設定されていない場合、パラグラフの子要素のみが実行されます。OpenXml - 段落内の最初のRun要素のインデックスを検索

一貫性のある方法インデックスランは?それとも、常に0か1のどちらかになりますか?コンテキストの

コードスニペット

もちろん、私はちょうど Math.Min(1, para.Count - 1)ような何かを行うことができますが、他の要素は段落に追加することができ、実行要素が中央の要素

なってしまう場合、私はわからないんだ
var run = new W.Run() { RunProperties = new W.RunProperties() { NoProof = new W.NoProof() } }; 
run.AppendChild(dr); 

para.InsertAt(run, 0); 

答えて

1

段落が複数の実行を含むことができ、今の「長い」方法それをやりました。例:

したがって、あなたの質問に対する答えは、達成したいことによって異なります。あなたの答えに基づいて、すでにParagraphに入っている実行の前に新しいRunを追加したいようです。

Paragraphクラスには、いくつかの方法が好きで便利な持ちInsertBeforeInsertAfterなど、FX:

Paragraph p = ... 
Run r = new Run(...); 
p.InsertBefore(r, p.GetFirstChild<Run>()); 

これをr段落の最初のRunようになります - 段落のRunがすでに存在していると仮定します。

OpenXML Productivity Toolを使用して、いくつかのサンプルワードドキュメントを「見てみる」ことができます。

+0

ええと、私は最初のものを探していましたが、最初のものを探していました:) 'para.InsertAt(run、indexOfFirstRun)'と 'para .InsertBefore(run、para.GetFirstChild ()) '? InsertAtメソッドは、指定されたインデックスの前に挿入されているようです(または、他のものをすべて移動して、そのインデックスに挿入しています)。 – p3tch

+0

ParagraphPropertiesのインデックスにある 'InsertAt'がなぜプロパティをヌルにするのかまだ分かりませんが、あなたは実行のインデックスに挿入する – p3tch

0

私はすべての耳だクリーナー解決策があるかどう...

 int index = 0; 
     for (int i = 0; i < para.Count(); i++) 
     { 
      if (para.ElementAt(i) is W.Run) 
      { 
       index = i; 
       break; 
      } 
     } 
     para.InsertAt(run, index); 
関連する問題