2010-09-20 164 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; 
    } 
}