2012-12-20 66 views
1

我有一些Word 2010模板,其中包含一些書籤和樣式,我必須在從某些XML獲取信息後生成Word文檔,並且我正在使用c#與Interop(版本8.3)。該模板已發給我,我根本無法更改它,因爲它遵循公司的文檔規則。使用C#Word Interop重新啓動列表編號

有時,當我使用模板的自定義編號列表樣式時,編號擰緊,莫名其妙地從2開始,而不是從1開始。其他時候,它遵循先前列表的編號,當我不總是想要那要發生。

固定的情況下,會很容易,如果我可以從模板修改現有樣式,或ContinuePreviousList: false從我的應用程序自定義樣式,但是生成的Word文檔必須有風格,他們強迫我用。

如果我打開Word文檔,右鍵單擊該列表,然後選擇「重啓1」選項(我沒有Word中英文,希望這是正確的翻譯),它解決的最我可能會遇到的問題,但我不知道如何使用來自Interop的問題。我記錄了宏,然後轉換爲C#以瞭解Word如何實現某些功能,但是當我開始錄製宏時鼠標被鎖定。有任何想法嗎?

回答

2

鼠標已鎖定,但您可以使用鍵盤上的right click mouse button獲取上下文菜單,然後在錄製宏時選擇重新啓動爲1。

我結束了這個用C#互操作:

using System.Runtime.InteropServices; 
using MSWord = Microsoft.Office.Interop.Word; 

namespace ResetNumberingInWordDoc 
{ 
    class Program 
    { 
     static void Main() 
     { 
      var application = new MSWord.Application(); 
      var document = application.Documents.Open(@"C:\mydocument.docx"); 

      const int listNumber = 1; //The first list on the page is list 1, the second is list 2 etc etc 

      document.Range().ListFormat.ApplyListTemplateWithLevel(
       ListTemplate: document.ListTemplates[listNumber], 
       ContinuePreviousList: false, 
       ApplyTo: MSWord.WdListApplyTo.wdListApplyToWholeList, 
       DefaultListBehavior: MSWord.WdDefaultListBehavior.wdWord10ListBehavior); 

      document.Save(); 
      document.Close(); 

      application.Quit(); 

      Marshal.ReleaseComObject(application); 
     } 
    } 
} 
+0

看來我的ListFormat中沒有'ApplyListTemplateWithLevel'方法,可能是因爲我的interop版本太舊了,但是你的代碼是我用「右鍵單擊鼠標按鈕」錄製宏時看到的,所以謝謝您! – ninten

+1

另一種似乎適用於我的方法是,一旦找到帶有編號列表格式的段落,將「List_Norm」樣式應用於列表編號(而不是列表內容)。這是我的第一篇文章,所以我不知道如何繼續,即使我已經接受了你的答案,我是否應該用另一個解決方案回答我自己的問題? – ninten

+0

我想不接受我的回答你自己的問題:) – JMK

1

我發現了「在1重啓」功能看錄製的宏執行的確切方式。一旦你找到與編號列表樣式的段落,你必須選擇要「重啓1」的數量和應用「List_Norm」樣式:

listParagraph.SelectNumber(); //Select numbers from the NumberList paragraph 
application.Selection.set_Style(document.Styles["List_Norm"]); //Apply "List_Norm" style 

這樣,列表的內容將保留原始樣式,但列表將從1開始。

可以應用相同的代碼重新啓動標題樣式,但應用「Tit_List」樣式而不是「List_Norm」。