Работа с комментариями
Попробуйте онлайн
Вы можете воспользоваться этой функцией с помощью нашего сайта Удалить аннотации можно бесплатно онлайн.
Aspose.Words позволяет пользователям работать с комментариями – комментарии в документе в Aspose.Words представлены классом Comment. Также используйте классы CommentRangeStart и CommentRangeEnd, чтобы указать область текста, которая должна быть связана с комментарием.
Добавить комментарий
Aspose.Words позволяет добавлять комментарии несколькими способами:
- Использование класса Comment
- Использование классов CommentRangeStart и CommentRangeEnd
В следующем примере кода показано, как добавить комментарий к абзацу с помощью класса Comment:
В следующем примере кода показано, как добавить комментарий к абзацу, используя область текста и классы CommentRangeStart и CommentRangeEnd:
Извлекать или удалять комментарии
Использование комментариев в документе Word (в дополнение к отслеживанию изменений) является обычной практикой при просмотре документов, особенно при наличии нескольких рецензентов. Могут возникнуть ситуации, когда единственное, что вам нужно от документа, - это комментарии. Допустим, вы хотите составить список результатов проверки, или, возможно, вы собрали всю полезную информацию из документа и просто хотите удалить ненужные комментарии. Возможно, вы захотите просмотреть или удалить комментарии конкретного рецензента.
В этом примере мы рассмотрим несколько простых методов как для сбора информации из комментариев в документе, так и для удаления комментариев из документа. В частности, мы рассмотрим, как:
- Извлеките все комментарии из документа или только те, которые были сделаны конкретным автором.
- Удалите все комментарии из документа или только от определенного автора.
Как извлечь или удалить комментарии
Код в этом примере на самом деле довольно прост, и все методы основаны на одном и том же подходе. Комментарий в документе Word представлен объектом Comment в объектной модели документа Aspose.Words. Чтобы собрать все комментарии в документе, используйте метод get_child_nodes с первым параметром, равным NodeType.COMMENT. Убедитесь, что для второго параметра метода get_child_nodes установлено значение true: это заставляет метод get_child_nodes рекурсивно выбирать из всех дочерних узлов, а не собирать только непосредственные дочерние узлы.
Чтобы проиллюстрировать, как извлекать и удалять комментарии из документа, мы выполним следующие шаги:
- Откройте документ Word с помощью класса Document
- Собрать все комментарии из документа в коллекцию
- Чтобы извлечь комментарии:
- Просматривайте коллекцию с помощью оператора foreach
- Извлеките и укажите имя автора, дату и время, а также текст всех комментариев
- Извлеките и укажите имя автора, дату и время, а также текст комментариев, написанных конкретным автором, в данном случае автором
ks
- Чтобы удалить комментарии:
- Пройдитесь в обратном направлении по коллекции, используя оператор for
- Удалять комментарии
- Сохраните изменения
Как извлечь все комментарии
Метод get_child_nodes очень полезен, и вы можете использовать его каждый раз, когда вам нужно получить список узлов документа любого типа. Результирующая коллекция не создает немедленных накладных расходов, поскольку узлы выбираются в эту коллекцию только при перечислении элементов в ней или доступе к ним.
В следующем примере кода показано, как извлечь имя автора, дату и время, а также текст всех комментариев в документе:
Как извлечь комментарии указанного автора
После того, как вы выбрали Comment узлов в коллекции, все, что вам нужно сделать, это извлечь необходимую информацию. В этом примере инициалы автора, дата, время и обычный текст комментария объединены в одну строку; вы могли бы сохранить их каким-либо другим способом.
Перегруженный метод, который извлекает комментарии от конкретного автора, почти такой же, он просто проверяет имя автора перед добавлением информации в массив.
В следующем примере кода показано, как извлечь имя автора, дату и время, а также текст комментариев указанного автора:
Как удалить комментарии
Если вы удаляете все комментарии, нет необходимости перемещаться по коллекции, удаляя комментарии один за другим; вы можете удалить их, вызвав команду clear в коллекции комментариев.
В следующем примере кода показано, как удалить все комментарии в документе:
Когда вам нужно выборочно удалить комментарии, процесс становится более похожим на код, который мы использовали для извлечения комментариев.
В следующем примере кода показано, как удалить комментарии указанного автора:
Главное, на что следует обратить внимание, - это использование оператора for. В отличие от простого извлечения, здесь вы хотите удалить комментарий. Подходящий прием - выполнить итерацию коллекции в обратном порядке от последнего Comment к первому. Причина этого в том, что если вы начнете с конца и будете двигаться в обратном направлении, индекс предыдущих элементов останется неизменным, и вы сможете вернуться к первому элементу в коллекции.
В следующем примере кода показаны методы извлечения и удаления комментариев:
Как удалить комментарий между CommentRangeStart и CommentRangeEnd
Используя Aspose.Words, вы также можете удалить комментарии между узлами CommentRangeStart и CommentRangeEnd.
В следующем примере кода показано, как удалить текст между CommentRangeStart и CommentRangeEnd:
# Open the document.
doc = aw.Document(docs_base.my_dir + "Comments.docx")
commentStart = doc.get_child(aw.NodeType.COMMENT_RANGE_START, 0, True).as_comment_range_start()
commentEnd = doc.get_child(aw.NodeType.COMMENT_RANGE_END, 0, True).as_comment_range_end()
currentNode = commentStart
isRemoving = True
while (currentNode != None and isRemoving) :
if (currentNode.node_type == aw.NodeType.COMMENT_RANGE_END) :
isRemoving = False
nextNode = currentNode.next_pre_order(doc)
currentNode.remove()
currentNode = nextNode
# Save the document.
doc.save(docs_base.artifacts_dir + "WorkingWithComments.remove_region_text.docx")
Добавить или удалить ответ на комментарий
Метод add_reply добавляет ответ к этому комментарию. Пожалуйста, обратите внимание, что из-за существующих ограничений Microsoft Office в документе разрешен только 1 уровень ответов. При вызове этого метода для существующего комментария к ответу будет создано исключение типа InvalidOperationException.
Вы можете использовать метод remove_reply, чтобы удалить указанный ответ на этот комментарий.
В следующем примере кода показано, как добавить ответ к комментарию и удалить ответ на комментарий:
Прочитайте ответ на комментарий
Свойство replies возвращает коллекцию объектов Comment, которые являются непосредственными дочерними элементами указанного комментария.
В следующем примере кода показано, как перебирать ответы на комментарии и разрешать их: