2017-08-09 23 views
1

私はopenxmlを使って作業しています。基本的に私は元の文書を編集しています。それはテンプレートです。テンプレートは最初のページと2番目のページリストにリストを渡す<T>

 DocTable docTable = new DocTable(); 
     Paragraph paragraph = doc.MainDocumentPart.Document.Body.Descendants<Paragraph>() 
     .Where<Paragraph>(p => p.InnerText.Equals("some Text")).First(); 
     Table table = docTable.createTable(Convert.ToInt16(2), Convert.ToInt16(2)); 


     mainPart.Document.Body.InsertAfter(table, paragraph); 

私は検索basicly:ので、すべてのセクション、私はそれは、2ページの間に追加されなければならない(..など、段落、テーブル)を追加し、私はすでに、私はシンプルなテーブルをこのようを挿入できることを成し遂げますページ1の終わりにpargraphを置き、後にテーブルを挿入します。私の問題は次のとおりです。フロントエンドWebページからセクションを1つも受け取らない、セクションのリストを受け取る、このリストを定義されたタイプのないオブジェクトのリストとして定義したのは、テーブル、段落などを持つことができるからです。

List<Object> listOfSections = new List<Object>(); 

では、フロントエンドからのセクションを受け取り、そしてそれは、このようなキーであるかを識別:

foreach (DocumentAtributes section in sections.atributes) 
{ 
    if(section.key != "Document") 
    { 
     checkSection(mainPart, section, listOfSections); 
    } 
} 

public void checkSection(MainDocumentPart mainPart,DocumentAtributes section,List<Object> listOfSections) 
{ 
    switch (section.key) 
    { 
     case "Table": 
      DocTable docTable = new DocTable(); 
      Table table = docTable.createTable(Convert.ToInt16(section.rows), Convert.ToInt16(section.cols)); 
      listOfSections.Add(new Run(table)); 
      break; 
     case "Paragraph": 
      DocRun accessTypeTitle = new DocRun(); 
      Run permissionTitle = accessTypeTitle.createParagraph(section.text, PARAGRAPHCOLOR, Convert.ToInt16(section.fontSize), DEFAULTFONT,section.align); 
      listOfSections.Add(permissionTitle); 
      break; 
     case "Image": 
      DocImage docImage = new DocImage(); 
      Run image = docImage.imageCreatorFromDisk(mainPart, "abcd", Convert.ToInt16(section.width), Convert.ToInt16(section.height), section.align, null, null, section.wrapChoice, section.base64); 
      listOfSections.Add(image); 
      break; 
    } 
} 

が、私は方法が必要です

のでbasicly私はこれを持っていますこのリストをinsertAfterに追加するには、リストでなければなりません。個々のオブジェクトを追加することはできません。最初に挿入すると、次のセクションが段落の後に追加されます。それはtと同じです彼はセクション。

のでinsertAfterはリストを受け取り、私はオブジェクトのリストに方法があり、このようなものです:insertAfter(リスト、refChildの)

iは、オブジェクトの私のリストを唱えるか、他の何かを行うことができますか?ここで何か助けが必要です。

+0

generic以外のコレクションを混乱させるのではなく、リストまたは(好ましくは)いくつかの一般的なスーパータイプを使用できませんか? – Casey

+0

いいえ私はfrontEndから複素jsonを受け取っているので、何でも構いません –

+0

または少なくとも私はより良い解を知らない –

答えて

2

逆順でリストを反復してリストの最初の要素をparagraphの直後に、次に2番目に、次に3番目にすることができますあなたは要素を持つリストで起動した場合

for (int i = listOfSections.Count - 1; i >= 0; i--) 
{ 
    mainPart.Document.Body.InsertAfter(listOfSections[i], paragraph); 
} 

要素1
エレメント2
エレメント3
Element4

、ドキュメントだけで始まります

段落

次に、各繰り返しの後に次のように設定します。

反復1

段落
Element4

反復2

段落
エレメント3
Element4

反復3

段落
エレメント2
エレメント3
Element4

、最終的に、Iterati所望の結果であるエレメント2

段落
要素1
4に エレメント3
Element4

+0

ありがとう、それは簡単な解決策でしたが、それについては決して教えられませんでした:D –

関連する問題