Interop Word - 从文档中删除页面

时间:2010-09-20 18:07:15

标签: c# .net interop ms-word

使用Word Interop库从Document对象中删除特定页面的最简单,最有效的方法是什么?

我注意到有一个Pages属性可以扩展/实现IEnumerable。可以简单地删除数组中的元素,并从文档中删除页面吗?

我也看过Ranges和Section的例子,但使用起来看起来并不优雅。

感谢。

2 个答案:

答案 0 :(得分:4)

一种可能的选择是为整个页面添加书签(选择整个页面,转到“工具”|“插入书签”,然后键入名称)。然后,您可以使用Document对象的Bookmarks集合来引用该文本并将其删除。

或者,尝试使用此代码的C#等价物:

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

第一行将光标移动到页面“PageNumber”。第二个使用预定义书签,它始终引用光标当前所在的页面,包括页面末尾的分页符(如果存在)。

答案 1 :(得分:3)

对你的问题的简短回答是,没有优雅的方式来做你想要实现的目标。

Word严重地将文档内容与其布局分开。就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;
    }
}