Interop Word - Удалить страницу из документа - PullRequest
3 голосов
/ 20 сентября 2010

Какой самый простой и эффективный способ удалить определенную страницу из объекта Document с использованием библиотек Word Interop?

Я заметил, что есть свойство Pages, которое расширяет / реализует IEnumerable.Можно ли просто удалить элементы в массиве, и страницы будут удалены из документа?

Я также видел примеры Ranges и Section, но они выглядят не очень элегантно.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 21 сентября 2010

Один из возможных вариантов - добавить целые страницы в закладки (выберите всю страницу, перейдите в Инструменты | Вставить закладку и введите имя).Затем вы можете использовать коллекцию Bookmarks объекта Document, чтобы обратиться к тексту и удалить его.

В качестве альтернативы, попробуйте C # эквивалент этого кода:

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

Первая строка перемещаеткурсор на страницу «PageNumber».Второй использует предопределенную закладку, которая всегда ссылается на страницу, на которой в данный момент находится курсор, включая разрыв страницы в конце страницы, если он существует.

3 голосов
/ 21 сентября 2010

Короткий ответ на ваш вопрос заключается в том, что не существует элегантного способа сделать то, что вы пытаетесь достичь.

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...