Bekerja dengan Komentar
Coba daring
Anda dapat mencoba fungsi ini dengan Hapus anotasi online gratis kami.
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:
- Menggunakan kelas Comment
- 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-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Write("Some text is added."); | |
Comment comment = new Comment(doc, "Awais Hafeez", "AH", DateTime.Today); | |
builder.CurrentParagraph.AppendChild(comment); | |
comment.Paragraphs.Add(new Paragraph(doc)); | |
comment.FirstParagraph.Runs.Add(new Run(doc, "Comment text.")); | |
dataDir = dataDir + "Comments_out.doc"; | |
// Save the document. | |
doc.Save(dataDir); |
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-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
Document doc = new Document(); | |
Paragraph para1 = new Paragraph(doc); | |
Run run1 = new Run(doc, "Some "); | |
Run run2 = new Run(doc, "text "); | |
para1.AppendChild(run1); | |
para1.AppendChild(run2); | |
doc.FirstSection.Body.AppendChild(para1); | |
Paragraph para2 = new Paragraph(doc); | |
Run run3 = new Run(doc, "is "); | |
Run run4 = new Run(doc, "added "); | |
para2.AppendChild(run3); | |
para2.AppendChild(run4); | |
doc.FirstSection.Body.AppendChild(para2); | |
Comment comment = new Comment(doc, "Awais Hafeez", "AH", DateTime.Today); | |
comment.Paragraphs.Add(new Paragraph(doc)); | |
comment.FirstParagraph.Runs.Add(new Run(doc, "Comment text.")); | |
CommentRangeStart commentRangeStart = new CommentRangeStart(doc, comment.Id); | |
CommentRangeEnd commentRangeEnd = new CommentRangeEnd(doc, comment.Id); | |
run1.ParentNode.InsertAfter(commentRangeStart, run1); | |
run3.ParentNode.InsertAfter(commentRangeEnd, run3); | |
commentRangeEnd.ParentNode.InsertAfter(comment, commentRangeEnd); | |
dataDir = dataDir + "Anchor.Comment_out.doc"; | |
// Save the document. | |
doc.Save(dataDir); |
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 GetChildNodes dengan parameter pertama disetel ke NodeType.Comment. Pastikan parameter kedua metode GetChildNodes diatur ke true: ini memaksa GetChildNodes 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:
- Buka dokumen Word menggunakan kelas Document
- Dapatkan semua komentar dari dokumen ke dalam koleksi
- Untuk mengekstrak komentar:
- Telusuri koleksi menggunakan operator foreach
- Ekstrak dan cantumkan nama penulis, tanggal & waktu serta teks semua komentar
- Ekstrak dan cantumkan nama penulis, tanggal & waktu serta teks komentar yang ditulis oleh penulis tertentu, dalam hal ini penulis ‘ks’
- Untuk menghapus komentar:
- Kembali ke koleksi menggunakan operator for
- Hapus komentar
- Simpan perubahannya
Cara Mengekstrak Semua Komentar
Metode GetChildNodes 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-.NET | |
static ArrayList ExtractComments(Document doc) | |
{ | |
ArrayList collectedComments = new ArrayList(); | |
// Collect all comments in the document | |
NodeCollection comments = doc.GetChildNodes(NodeType.Comment, true); | |
// Look through all comments and gather information about them. | |
foreach (Comment comment in comments) | |
{ | |
collectedComments.Add(comment.Author + " " + comment.DateTime + " " + comment.ToString(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:
Cara Menghapus Komentar
Jika Anda menghapus semua komentar, tidak perlu menelusuri koleksi menghapus komentar satu per satu. Anda dapat menghapusnya dengan memanggil metode Clear pada kumpulan 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-.NET | |
static void RemoveComments(Document doc) | |
{ | |
// Collect all comments in the document | |
NodeCollection comments = doc.GetChildNodes(NodeType.Comment, true); | |
// Remove all comments. | |
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:
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 Komentar terakhir ke Komentar 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-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
string fileName = "TestFile.doc"; | |
// Open the document. | |
Document doc = new Document(dataDir + fileName); | |
// Extract the information about the comments of all the authors. | |
foreach (string comment in ExtractComments(doc)) | |
Console.Write(comment); | |
// Remove comments by the "pm" author. | |
RemoveComments(doc, "pm"); | |
Console.WriteLine("Comments from \"pm\" are removed!"); | |
// Extract the information about the comments of the "ks" author. | |
foreach (string comment in ExtractComments(doc, "ks")) | |
Console.Write(comment); | |
//Read the comment's reply and resolve them. | |
CommentResolvedandReplies(doc); | |
// Remove all comments. | |
RemoveComments(doc); | |
Console.WriteLine("All comments are removed!"); | |
dataDir = dataDir + RunExamples.GetOutputFilePath(fileName); | |
// Save the document. | |
doc.Save(dataDir); |
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:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_WorkingWithComments(); | |
string fileName = "TestFile.doc"; | |
// Open the document. | |
Document doc = new Document(dataDir + fileName); | |
CommentRangeStart commentStart = (CommentRangeStart)doc.GetChild(NodeType.CommentRangeStart, 0, true); | |
CommentRangeEnd commentEnd = (CommentRangeEnd)doc.GetChild(NodeType.CommentRangeEnd, 0, true); | |
Node currentNode = commentStart; | |
Boolean isRemoving = true; | |
while (currentNode != null && isRemoving) | |
{ | |
if (currentNode.NodeType == NodeType.CommentRangeEnd) | |
isRemoving = false; | |
Node nextNode = currentNode.NextPreOrder(doc); | |
currentNode.Remove(); | |
currentNode = nextNode; | |
} | |
dataDir = dataDir + "RemoveRegionText_out.doc"; | |
// Save the document. | |
doc.Save(dataDir); |
Tambah atau Hapus Balasan Komentar
Metode AddReply 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 RemoveReply 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-.NET | |
Document doc = new Document(dataDir + "TestFile.doc"); | |
Comment comment = (Comment)doc.GetChild(NodeType.Comment, 0, true); | |
//Remove the reply | |
comment.RemoveReply(comment.Replies[0]); | |
//Add a reply to comment | |
comment.AddReply("John Doe", "JD", new DateTime(2017, 9, 25, 12, 15, 0), "New reply"); | |
dataDir = dataDir + "TestFile_Out.doc"; | |
// Save the document to disk. | |
doc.Save(dataDir); |
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-.NET | |
static void CommentResolvedandReplies(Document doc) | |
{ | |
NodeCollection comments = doc.GetChildNodes(NodeType.Comment, true); | |
Comment parentComment = (Comment)comments[0]; | |
foreach (Comment childComment in parentComment.Replies) | |
{ | |
// Get comment parent and status. | |
Console.WriteLine(childComment.Ancestor.Id); | |
Console.WriteLine(childComment.Done); | |
// And update comment Done mark. | |
childComment.Done = true; | |
} | |
} |