2017-04-13 76 views
0

我想添加幾個空字段(即ctrl+F9快捷方式)槽循環到Word文檔(通過VSTO)到Word文檔中添加空字段,但由於某種原因,只有最後一個出現在文檔中。通過C#互操作

任何人都可以幫助我嗎?

這裏是我使用的代碼:

 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

CONCAT Environment.NewLine到循環

0

裏面的文字:隨意,這個代碼附加到for循環體,使領域更加明顯試試這個代替....`

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(); 
    }