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

Aspose.Words позволява на потребителите да работят с коментари. . коментари в документ в Aspose.Words са представени от Comment Клас. Използвайте също CommentRangeStart както и CommentRangeEnd класове за определяне на региона на текста, който следва да бъде свързан с коментар.

Добавяне на коментар

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

  1. Използване на Comment клас
  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 документ (в допълнение към Track Changes) е обичайна практика при преглеждане на документи, особено когато има множество рецензенти. Може да има ситуации, в които единственото нещо, от което се нуждаете от документ са коментарите. Кажете, че искате да генерирате списък с констатации от прегледа, или може би сте събрали цялата полезна информация от документа и просто искате да премахнете ненужни коментари. Може да искате да видите или премахнете коментарите на определен рецензент.

В тази извадка ще разгледаме някои прости методи както за събиране на информация от коментарите в документ, така и за премахване на коментари от документ. Конкретно ще покрием как да:

  • Извадете всички коментари от документ или само тези, направени от определен автор.
  • Премахване на всички коментари от документ или само от определен автор.

Как да извлечете или премахнете коментари

Кодът в тази проба всъщност е доста прост и всички методи се основават на един и същ подход. Коментар в Word документ е представен от Comment обект в Aspose.Words модел документ обект. За да съберете всички коментари в документ, използвайте get_child_nodes метод с първия параметър, определен за NodeType.COMMENT. Уверете се, че вторият параметър на get_child_nodes метод е настроен на true: това принуждава get_child_nodes да изберете от всички детски възли рекурсивно, а не само събиране на непосредствените деца.

За да илюстрираме как да извлечем и премахнем коментари от даден документ, ще минем през следните стъпки:

  1. Отваряне на Word документ с помощта на Document клас
  2. Вземете всички коментари от документа в колекция
  3. За да извлечете коментари:
    1. Претърсете колекцията с помощта на всеки оператор
    2. Извличане и изброяване на името на автора, датата и часа и текста на всички коментари
    3. Извличане и изброяване на името на автора, дата и час и текст на коментарите, написани от конкретен автор, в този случай авторът
  4. Премахване на коментари:
    1. Преминавате назад през колекцията с помощта на оператора
    2. Премахване на коментари
  5. Запис на промените

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

На 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")

Как да премахнете коментар между коментарRangeStart и коментарRange End

Използване 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