2017-04-13 9 views
0

いくつかの空白のフィールド(つまりctrl+F9ショートカット)をワードドキュメントに(VSTO経由で)追加しようとしていますが、何らかの理由で最後のものだけがドキュメントに表示されます。C#で空白のフィールドを追加Interop

誰でも手伝ってもらえますか?出力された

 Document doc = Globals.ThisAddIn.Application.ActiveDocument; 
     if (doc == null) 
      return; 

     for (int i = 0; i < 5; i++) 
     { 
      Paragraph para = doc.Paragraphs.Add(); 
      object fieldType = WdFieldType.wdFieldEmpty; 
      object text = "test" + i; 
      object preserve = false; 
      Field f = doc.Fields.Add(para.Range , ref fieldType, ref text, ref preserve); 

     } 

{ test4 } 

MSDN Reference link here

答えて

2

の物乞いで新しい段落を作成します。問題は、5つのフィールドがすべて互いに重なっていることです。おそらくすぐに停止することによって誘発され、どのように進めたいかは明確ではありません。任意に、フィールドをより見やすくするために、ループ体にこのコードを追加します。

f.ShowCodes = true; 
para.Range.InsertAfter("\r\n"); 
1

すべての段落が前のものよりも優先されますので、だことをここ

は、私が使用するコードです。
次の例では、文書それだけで罰金が、見えにくい作品

using Microsoft.Office.Interop.Word; 

namespace ConsoleWord 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Document doc = new Document(); 
      for (int i = 0; i < 5; i++) 
      { 
       var range = doc.Range(0, 0); 

       object text = "test" + i; 
       object fieldType = WdFieldType.wdFieldAuthor; 

       Paragraph para = doc.Paragraphs.Add(range); 
       doc.Fields.Add(range, ref fieldType, ref text); 

      } 
      doc.SaveAs2(@"C:\tmpc\aa.docx"); 
     } 
    } 
} 
0

連結Environment.NewLineループ

0

内部のテキストに使用すると、ループ内のすべてのテキストオブジェクトを表示したいならば、 `....代わりにこれを試して

object text = ""; 
    for (int i = 0; i < 5; i++) 
    { 
     Paragraph para = doc.Paragraphs.Add(); 
     object fieldType = WdFieldType.wdFieldEmpty; 
     if(text.toString() != "") 
     text = text + "test" + i; 
     else 
     text = "test" + i; 
     object preserve = false; 
    } 
    Field f = doc.Fields.Add(para.Range , ref fieldType, ref text, ref preserve); 

出力: {TEST1 TEST2 TEST3 TEST4}

それとももField.Updaを使用して試すことができます入力されたフィールドを更新するために必要な場所に戦略的にte()を配置します。バッファリングに関する問題があります。

foreach (Field field in doc.Fields) 
field.Update(); 

だから、あなたは....

for (int i = 0; i < 5; i++) 
    { 
     Paragraph para = doc.Paragraphs.Add(); 
     object fieldType = WdFieldType.wdFieldEmpty; 
     object text = "test" + i; 
     object preserve = false; 
     Field f = doc.Fields.Add(para.Range , ref fieldType, ref text, ref preserve); 
     foreach (Field field in doc.Fields) 
      field.Update(); 
    } 
を試すこと
関連する問題