Работа с комментариями

Aspose.Words позволяет пользователям работать с комментариями – комментарии в документе в Aspose.Words представлены классом Comment. Также используйте классы CommentRangeStart и CommentRangeEnd, чтобы указать область текста, которая должна быть связана с комментарием.

Добавить комментарий

Aspose.Words позволяет добавлять комментарии несколькими способами:

  1. Использование класса Comment
  2. Использование классов CommentRangeStart и CommentRangeEnd

В следующем примере кода показано, как добавить комментарий к абзацу с помощью класса Comment:

В следующем примере кода показано, как добавить комментарий к абзацу, используя область текста и классы CommentRangeStart и CommentRangeEnd:

Извлекать или удалять комментарии

Использование комментариев в документе Word (в дополнение к отслеживанию изменений) является обычной практикой при просмотре документов, особенно при наличии нескольких рецензентов. Могут возникнуть ситуации, когда единственное, что вам нужно от документа, - это комментарии. Допустим, вы хотите составить список результатов проверки, или, возможно, вы собрали всю полезную информацию из документа и просто хотите удалить ненужные комментарии. Возможно, вы захотите просмотреть или удалить комментарии конкретного рецензента.

В этом примере мы рассмотрим несколько простых методов как для сбора информации из комментариев в документе, так и для удаления комментариев из документа. В частности, мы рассмотрим, как:

  • Извлеките все комментарии из документа или только те, которые были сделаны конкретным автором.
  • Удалите все комментарии из документа или только от определенного автора.

Как извлечь или удалить комментарии

Код в этом примере на самом деле довольно прост, и все методы основаны на одном и том же подходе. Комментарий в документе Word представлен объектом Comment в объектной модели документа Aspose.Words. Чтобы собрать все комментарии в документе, используйте метод GetChildNodes с первым параметром, равным NodeType.Comment. Убедитесь, что для второго параметра метода GetChildNodes установлено значение true: это заставляет метод GetChildNodes рекурсивно выбирать из всех дочерних узлов, а не собирать только непосредственные дочерние узлы.

Чтобы проиллюстрировать, как извлекать и удалять комментарии из документа, мы выполним следующие шаги:

  1. Откройте документ Word с помощью класса Document
  2. Соберите все комментарии из документа в коллекцию
  3. Чтобы извлечь комментарии:
    1. Просмотрите коллекцию с помощью оператора foreach
    2. Извлеките и перечислите имя автора, дату и время, а также текст всех комментариев
    3. Извлеките и укажите имя автора, дату и время, а также текст комментариев, написанных конкретным автором, в данном случае автором ‘ks’
  4. Чтобы удалить комментарии:
    1. Пройдитесь в обратном порядке по коллекции, используя для оператора
    2. Удалите комментарии
  5. Сохраните изменения

Как извлечь все комментарии

Метод GetChildNodes очень полезен, и вы можете использовать его каждый раз, когда вам нужно получить список узлов документа любого типа. Результирующая коллекция не создает немедленных накладных расходов, поскольку узлы выбираются в эту коллекцию только при перечислении элементов в ней или доступе к ним.

В следующем примере кода показано, как извлечь имя автора, дату и время, а также текст всех комментариев в документе:

Как извлечь комментарии указанного автора

После того, как вы выделили узлы комментариев в коллекцию, все, что вам нужно сделать, это извлечь необходимую информацию. В этом примере инициалы автора, дата, время и обычный текст комментария объединены в одну строку; вы могли бы сохранить их каким-либо другим способом.

Перегруженный метод, который извлекает комментарии от определенного автора, почти такой же, он просто проверяет имя автора перед добавлением информации в массив.

В следующем примере кода показано, как извлечь имя автора, дату и время, а также текст комментариев указанного автора:

Как удалить комментарии

Если вы удаляете все комментарии, нет необходимости перемещаться по коллекции, удаляя комментарии один за другим; вы можете удалить их, вызвав команду NodeCollection.Clear в коллекции комментариев.

В следующем примере кода показано, как удалить все комментарии в документе:

Когда вам нужно выборочно удалить комментарии, процесс становится более похожим на код, который мы использовали для извлечения комментариев.

В следующем примере кода показано, как удалить комментарии указанного автора:

Главное, на что следует обратить внимание, - это использование оператора for. В отличие от простого извлечения, здесь вы хотите удалить комментарий. Подходящий прием - выполнить итерацию сбора данных в обратном порядке от последнего комментария к первому. Причина этого в том, что если вы начнете с конца и будете двигаться в обратном направлении, индекс предыдущих элементов останется неизменным, и вы сможете вернуться к первому элементу в коллекции.

В следующем примере кода показаны методы извлечения и удаления комментариев:

Как удалить комментарий между CommentRangeStart и CommentRangeEnd

Используя Aspose.Words, вы также можете удалить комментарии между узлами CommentRangeStart и CommentRangeEnd.

В следующем примере кода показано, как удалить текст между CommentRangeStart и CommentRangeEnd:

Добавление и удаление ответа на комментарий

Метод AddReply добавляет ответ к этому комментарию. Пожалуйста, обратите внимание, что из-за существующих ограничений Microsoft Office в документе разрешен только уровень ответов 1. Исключение типа InvalidOperationException будет вызвано, если этот метод будет вызван для существующего ответа на комментарий.

Вы можете использовать метод RemoveReply, чтобы удалить указанный ответ на этот комментарий.

В следующем примере кода показано, как добавить ответ к комментарию и удалить ответ на комментарий:

Прочитайте ответ на комментарий

Свойство Replies возвращает коллекцию объектов Comment, которые являются непосредственными дочерними элементами указанного комментария.

В следующем примере кода показано, как перебирать ответы на комментарии и разрешать их: