Bekerja dengan Komentar

Aspose.Words memungkinkan pengguna untuk bekerja dengan komentar – komentar dalam dokumen di Aspose.Words diwakili oleh kelas Comment. Gunakan juga kelas CommentRangeStart dan CommentRangeEnd untuk menentukan wilayah teks yang harus dikaitkan dengan komentar.

Tambahkan komentar

Aspose.Words memungkinkan Anda menambahkan komentar dengan beberapa cara:

  1. Menggunakan kelas Comment
  2. Menggunakan kelas CommentRangeStart dan CommentRangeEnd

Contoh kode berikut menunjukkan cara menambahkan komentar ke paragraf menggunakan kelas 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")

Contoh kode berikut menunjukkan cara menambahkan komentar ke paragraf menggunakan wilayah teks dan kelas CommentRangeStart dan 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")

Ekstrak atau Hapus Komentar

Menggunakan Komentar di dokumen Word (selain Lacak Perubahan) adalah praktik umum saat meninjau dokumen, terutama ketika terdapat beberapa peninjau. Mungkin ada situasi di mana satu-satunya hal yang Anda butuhkan dari sebuah dokumen adalah komentar. Katakanlah Anda ingin membuat daftar temuan tinjauan, atau mungkin Anda telah mengumpulkan semua informasi berguna dari dokumen dan Anda hanya ingin menghapus komentar yang tidak perlu. Anda mungkin ingin melihat atau menghapus komentar dari pengulas tertentu.

Dalam contoh ini kita akan melihat beberapa metode sederhana untuk mengumpulkan informasi dari komentar dalam dokumen dan untuk menghapus komentar dari dokumen. Secara khusus kami akan membahas cara:

  • Ekstrak semua komentar dari dokumen atau hanya komentar yang dibuat oleh penulis tertentu.
  • Hapus semua komentar dari dokumen atau hanya dari penulis tertentu.

Cara Mengekstrak atau Menghapus Komentar

Kode dalam contoh ini sebenarnya cukup sederhana dan semua metode didasarkan pada pendekatan yang sama. Komentar dalam dokumen Word diwakili oleh objek Comment dalam model objek dokumen Aspose.Words. Untuk mengumpulkan semua komentar dalam dokumen gunakan metode get_child_nodes dengan parameter pertama disetel ke NodeType.COMMENT. Pastikan parameter kedua metode dapatkan_child_nodes diatur ke true: ini memaksa dapatkan_child_nodes untuk memilih dari semua node anak secara rekursif, bukan hanya mengumpulkan anak langsung.

Untuk mengilustrasikan cara mengekstrak dan menghapus komentar dari dokumen, kita akan melalui langkah-langkah berikut:

  1. Buka dokumen Word menggunakan kelas Document
  2. Dapatkan semua komentar dari dokumen ke dalam koleksi
  3. Untuk mengekstrak komentar:
    1. Telusuri koleksi menggunakan operator foreach
    2. Ekstrak dan cantumkan nama penulis, tanggal & waktu serta teks semua komentar
    3. Ekstrak dan cantumkan nama penulis, tanggal & waktu serta teks komentar yang ditulis oleh penulis tertentu, dalam hal ini penulis ‘ks’
  4. Untuk menghapus komentar:
    1. Kembali ke koleksi menggunakan operator for
    2. Hapus komentar
  5. Simpan perubahannya

Cara Mengekstrak Semua Komentar

Metode get_child_nodes sangat berguna dan Anda dapat menggunakannya setiap kali Anda perlu mendapatkan daftar node dokumen jenis apa pun. Koleksi yang dihasilkan tidak menimbulkan overhead langsung karena node dipilih ke dalam koleksi ini hanya ketika Anda menghitung atau mengakses item di dalamnya.

Contoh kode berikut menunjukkan cara mengekstrak nama penulis, tanggal & waktu dan teks semua komentar di dokumen:

# 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

Cara Mengekstrak Komentar dari Penulis Tertentu

Setelah Anda memilih node Comment ke dalam koleksi, yang harus Anda lakukan adalah mengekstrak informasi yang Anda perlukan. Dalam contoh ini, inisial penulis, tanggal, waktu dan teks biasa dari komentar digabungkan menjadi satu string; Anda dapat memilih untuk menyimpannya dengan cara lain.

Metode kelebihan beban untuk mengekstrak Komentar dari penulis tertentu hampir sama, hanya memeriksa nama penulis sebelum menambahkan info ke dalam array.

Contoh kode berikut menunjukkan cara mengekstrak nama penulis, tanggal & waktu dan teks komentar oleh penulis yang ditentukan:

# 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

Cara Menghapus Komentar

Jika Anda menghapus semua komentar, Anda tidak perlu menelusuri koleksi untuk menghapus komentar satu per satu; Anda dapat menghapusnya dengan memanggil clear di koleksi komentar.

Contoh kode berikut menunjukkan cara menghapus semua komentar di dokumen:

# 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()

Saat Anda perlu menghapus komentar secara selektif, prosesnya menjadi lebih mirip dengan kode yang kami gunakan untuk ekstraksi komentar.

Contoh kode berikut menunjukkan cara menghapus komentar dari penulis tertentu:

# 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()

Poin utama yang perlu disoroti di sini adalah penggunaan operator for. Berbeda dengan ekstraksi sederhana, di sini Anda ingin menghapus komentar. Trik yang cocok adalah dengan mengulangi koleksi dari Comment terakhir ke Comment pertama. Alasannya adalah jika Anda memulai dari akhir dan bergerak mundur, indeks item sebelumnya tetap tidak berubah, dan Anda dapat kembali ke item pertama dalam koleksi.

Contoh kode berikut menunjukkan metode ekstraksi dan penghapusan komentar:

# 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")

Cara Menghapus Komentar antara CommentRangeStart dan CommentRangeEnd

Menggunakan Aspose.Words Anda juga dapat menghapus komentar antara node CommentRangeStart dan CommentRangeEnd.

Contoh kode berikut menunjukkan cara menghapus teks antara CommentRangeStart dan 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")

Tambah atau Hapus Balasan Komentar

Metode add_reply menambahkan balasan pada komentar ini. Harap dicatat bahwa karena keterbatasan Microsoft Office yang ada, hanya 1 tingkat balasan yang diperbolehkan dalam dokumen. Pengecualian tipe InvalidOperationException akan dimunculkan jika metode ini dipanggil pada komentar Balasan yang ada.

Anda dapat menggunakan metode remove_reply untuk menghapus balasan tertentu pada komentar ini.

Contoh kode berikut menunjukkan cara menambahkan balasan ke komentar dan menghapus balasan komentar:

# 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")

Baca Balasan Komentar

Properti replies mengembalikan kumpulan objek Comment yang merupakan turunan langsung dari komentar tertentu.

Contoh kode berikut menunjukkan cara mengulangi balasan komentar dan menyelesaikannya:

# 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