2010-09-20 204 views
3

什麼是使用Word Interop庫從Document對象中刪除特定頁面的最簡單和最有效的方法?Interop Word - 從文檔中刪除頁面

我注意到有一個頁面屬性擴展/實現IEnumerable。是否可以簡單地刪除數組中的元素,並將頁面從文檔中刪除?

我也看到了範圍和部分的例子,但看起來不太優雅使用。

謝謝。

+1

如果由於Word文檔可能具有不同的佈局/視圖,Microsoft不使用頁面,這是有道理的。我只是希望有一種比使用範圍更簡單的方法。 – Koekiebox 2010-09-21 07:03:43

+0

我知道它不使用Interop,但這些人有上面的一些很好的庫:http://www.aspose.com/categories/java-components/default.aspx – Koekiebox 2010-09-30 08:04:24

回答

4

一個可能的選擇是書籤,全部頁數(選擇整個頁面,轉到工具|插入書籤然後鍵入一個名字)。然後,您可以使用Document對象的書籤集合來引用文本並將其刪除。

或者,嘗試C#等效此代碼的:

Doc.ActiveWindow.Selection.GoTo wdPage, PageNumber 
Doc.Bookmarks("\Page").Range.Text = "" 

第一行的光標移動到網頁 「的PageNumber」。第二個使用預定義書籤,它總是指光標當前所在的頁面,如果存在,則包括頁面末尾的分頁符。

+0

作爲一個方面說明,我發現Range.Text =「」比Range.Delete更可靠,因爲前者似乎不受「智能剪切和粘貼」選項的影響。 – Foole 2010-09-21 07:54:37

+0

我看到書籤本身有一個Delete()函數。是否可以使用\ Page書籤上的Delete()來刪除該頁面? – Koekiebox 2010-09-21 08:24:29

+0

沒有。這將嘗試刪除書籤本身,這將導致運行時錯誤'5827':預定義的書籤不能被修改。 – Foole 2010-09-21 09:03:08

3

您的問題的簡短答案是,沒有優雅方式來做你想要實現的。

單詞嚴重地將文檔的內容與其佈局分離。就Word而言,文檔沒有頁面;相反,頁面是通過以某種方式(例如打印視圖)查看文檔而從文檔派生的。 Pages集合屬於Pane接口(例如由Application.ActiveWindow.ActivePane訪問),該接口控制佈局。因此,Page上沒有方法允許您更改(或刪除)導致頁面存在的內容。

如果您可以控制您在代碼中處理的文檔,我建議您在文檔中定義代表要以編程方式刪除的部分的部分。節是一個更好的構造,因爲它們表示內容,而不是佈局(節可能包含分頁符)。如果你這樣做,你可以使用下面的代碼刪除特定部分:

object missing = Type.Missing; 
foreach (Microsoft.Office.Interop.Word.Section section in doc.Sections) { 
    if (/* some criteria */) { 
     section.Range.Delete(ref missing, ref missing); 
     break; 
    } 
}