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

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

Додати коментар

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

1,1 км Використання Comment клас 2,2 км Використання CommentRangeStart і CommentRangeEnd Заняття

Приклад наступного коду показує, як додати коментар до абзацу за допомогою абзацу Comment клас:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
builder = aw.DocumentBuilder(doc)
builder.write("Some text is added.")
comment = aw.Comment(doc, "Awais Hafeez", "AH", datetime.today())
builder.current_paragraph.append_child(comment)
comment.paragraphs.add(aw.Paragraph(doc))
comment.first_paragraph.runs.add(aw.Run(doc, "Comment text."))
doc.save(docs_base.artifacts_dir + "WorkingWithComments.add_comments.docx")

Приклад наступного коду показує, як додати коментар до абзацу за допомогою регіону тексту та CommentRangeStart і CommentRangeEnd класи:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
para1 = aw.Paragraph(doc)
run1 = aw.Run(doc, "Some ")
run2 = aw.Run(doc, "text ")
para1.append_child(run1)
para1.append_child(run2)
doc.first_section.body.append_child(para1)
para2 = aw.Paragraph(doc)
run3 = aw.Run(doc, "is ")
run4 = aw.Run(doc, "added ")
para2.append_child(run3)
para2.append_child(run4)
doc.first_section.body.append_child(para2)
comment = aw.Comment(doc, "Awais Hafeez", "AH", datetime.today())
comment.paragraphs.add(aw.Paragraph(doc))
comment.first_paragraph.runs.add(aw.Run(doc, "Comment text."))
commentRangeStart = aw.CommentRangeStart(doc, comment.id)
commentRangeEnd = aw.CommentRangeEnd(doc, comment.id)
run1.parent_node.insert_after(commentRangeStart, run1)
run3.parent_node.insert_after(commentRangeEnd, run3)
commentRangeEnd.parent_node.insert_after(comment, commentRangeEnd)
doc.save(docs_base.artifacts_dir + "WorkingWithComments.anchor_comment.doc")

Вилучення або видалення коментарів

Використання коментарів у документі Word (на додаток до змін відстеження) є спільною практикою при перегляді документів, зокрема, коли є кілька рецензентів. Ви можете бути ситуації, де потрібно тільки від документа. Скажіть, що ви хочете створити список знайдених відгуків, або, можливо, ви зібрали всю корисну інформацію з документа і ви просто хочете видалити непотрібні коментарі. Ви можете переглянути або видалити коментарі конкретного рецензента.

У цьому прикладі ми розглянемо деякі прості методи збору інформації з коментарів в документі та для видалення коментарів з документа. Зокрема, ми покриємо, як:

  • Витяг всіх коментарів з документа або тільки тих, хто зробив автор.
  • Видаліть всі коментарі з документа або тільки з певного автора.

Як видалити або видалити Коментарі

Код в цьому прикладі фактично досить простий і всі методи базуються на тому ж підході. Коментар у документі Word представлений Comment об’єкт в Aspose.Words модель об’єкта документа. Щоб зібрати всі коментарі в документі використовуйте get_child_nodes метод з параметром першого параметра NodeType.COMMENTй Переконайтеся, що другий параметр JavaScript licenses API Веб-сайт Go1.13.8 метод встановлюється до true: це змушує JavaScript licenses API Веб-сайт Go1.13.8 щоб вибрати з усіх дочірньих вузлів, які рекурсують, а не тільки збираючи безпосередні діти.

Щоб ілюструвати, як витягти і видалити коментарі з документа, ми пройдемо наступні кроки:

1,1 км Відкрийте документ Word за допомогою документа Document клас 1,1 км Отримати всі коментарі з документа в збірку 1,1 км Для отримання коментарів:

  1. Зайдіть через збір за допомогою оператора
  2. Витяг та список імені автора, дати та часу та тексту всіх коментарів
  3. Витяг та список імені автора, дати та часу та тексту коментарів, написаних конкретним автором, в цьому випадку автор “ks” 1,1 км Для видалення коментарів:
  4. Повернутися через збір за допомогою оператора
  5. Видалити коментарі 1,1 км Збережіть зміни

Як витягти всі коментарі

Про нас get_child_nodes метод дуже корисний і ви можете використовувати його кожен раз, коли потрібно отримати список вузлів документів будь-якого типу. Отримана збірка не створює безпосередній наклад, тому що вершини вибираються в цю колекцію тільки тоді, коли ви обробляєте або доступ до предметів в ній.

Наприклад, наступний код показує, як витягти ім’я автора, дату та текст всіх коментарів у документі:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
@staticmethod
def extract_comments(doc) :
collectedComments = []
comments = doc.get_child_nodes(aw.NodeType.COMMENT, True)
for node in comments :
comment = node.as_comment()
collectedComments.append(comment.author + " " + comment.date_time.strftime("%Y-%m-%d %H:%M:%S") + " " + comment.to_string(aw.SaveFormat.TEXT))
return collectedComments

Як витягти Коментарі Визначеного автора

Після вибраного Comment Витягувати інформацію, яку потрібно. У цьому прикладі автор ініціюється, дата, час і звичайний текст коментара поєднується в один рядок; ви можете вибрати, щоб зберігати його в деяких інших варіантах замість.

Перевантажений метод, який видобуває Коментарі з певного автора, майже той же, він просто перевіряє назву автора перед додаванням інформації в масив.

Наприклад, наступний код показує, як витягти ім’я автора, дату та час і текст коментарів за вказаним автором:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
@staticmethod
def extract_comments_by_author(doc, authorName) :
collectedComments = []
comments = doc.get_child_nodes(aw.NodeType.COMMENT, True)
for node in comments :
comment = node.as_comment()
if (comment.author == authorName) :
collectedComments.append(comment.author + " " + comment.date_time.strftime("%Y-%m-%d %H:%M:%S") + " " + comment.to_string(aw.SaveFormat.TEXT))
return collectedComments

Як видалити коментарі

Якщо ви ви видалите всі коментарі, не потрібно переходити через збірне видалення коментарів по одному; ви можете видалити їх, викликаючи clear на збірках коментарів.

Приклад коду показує, як видалити всі коментарі в документі:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
@staticmethod
def remove_comments(doc) :
comments = doc.get_child_nodes(aw.NodeType.COMMENT, True)
comments.clear()

Коли потрібно вибрати для видалення коментарів, процес стає більш схожим на код, який ми використовували для видобутку коментарів.

Приклад коду показує, як видалити коментарі за вказаним автором:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
@staticmethod
def remove_comments_by_author(doc, authorName) :
comments = doc.get_child_nodes(aw.NodeType.COMMENT, True)
# Look through all comments and remove those written by the authorName.
for i in range(comments.count, 0) :
print(i)
comment = comments[i].as_comment()
if (comment.author == authorName) :
comment.remove()

Головний момент виділити тут – використання оператора. На відміну від простого видобутку, тут ви хочете видалити коментар. Підійде підказка - це зробити збірку назад з останнього Comment до першого. Причина цього, якщо ви починаєте з кінця і переходите назад, індекс передових елементів залишається незмінним, і ви можете працювати назад до першого елемента в колекції.

Приклад коду показує методи вилучення та видалення коментарів:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Comments.docx")
# Extract the information about the comments of all the authors.
for comment in self.extract_comments(doc) :
print(comment)
# Remove comments by the "pm" author.
self.remove_comments_by_author(doc, "pm")
print("Comments from \"pm\" are removed!")
# Extract the information about the comments of the "ks" author.
for comment in self.extract_comments_by_author(doc, "ks") :
print(comment)
# Read the comment's reply and resolve them.
self.comment_resolved_and_replies(doc)
# Remove all comments.
self.remove_comments(doc)
print("All comments are removed!")
doc.save(docs_base.artifacts_dir + "WorkingWithComments.process_comments.docx")

Як видалити коментар між CommentRangeStart і коментарRangeEnd

Використання 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 У документі допускається лише 1 рівень відповідей. Виняток типу InvalidOperationException буде піднятися, якщо цей метод називається на існуючий коментар відповідь.

Ви можете використовувати remove_reply спосіб видалити зазначену відповідь на цей коментар.

Приклад наступного коду показує, як додати відповідь на коментар і видалити відповідь коментаря:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "Comments.docx")
comment = doc.get_child(aw.NodeType.COMMENT, 0, True).as_comment()
comment.remove_reply(comment.replies[0])
comment.add_reply("John Doe", "JD", datetime(2017, 9, 25, 12, 15, 0), "New reply")
doc.save(docs_base.artifacts_dir + "WorkingWithComments.add_remove_comment_reply.docx")

Читайте коментар відповідь

Про нас replies повернення майна Comment об’єкти, які є безпосередніми дітьми зазначеного коментаря.

Наприклад, наступний код показує, як ітерувати відповіді коментаря та вирішувати їх:

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
@staticmethod
def comment_resolved_and_replies(doc) :
comments = doc.get_child_nodes(aw.NodeType.COMMENT, True)
parentComment = comments[0].as_comment()
for child in parentComment.replies :
childComment = child.as_comment()
# Get comment parent and status.
print(childComment.ancestor.id)
print(childComment.done)
# And update comment Done mark.
childComment.done = True