Práce s komentáři
Zkuste online
Tuto funkci můžete zkusit s naší Zdarma online odstranit anotace.
Aspose.Words umožňuje uživatelům pracovat s komentáři v dokumentu Aspose.Words jsou zastoupeny Comment třída. Také použijte CommentRangeStart a CommentRangeEnd tříd pro upřesnění oblasti textu, která by měla být spojena s poznámkou.
Přidat komentář
Aspose.Words umožňuje přidat komentáře několika způsoby:
- Použití Comment třída
- Použití CommentRangeStart a CommentRangeEnd třídy
Následující příklad kódu ukazuje, jak přidat komentář k odstavci pomocí Comment třída:
// 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); |
Následující příklad kódu ukazuje, jak přidat komentář k odstavci pomocí oblasti textu a CommentRangeStart a CommentRangeEnd třídy:
// 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); |
Extrahovat nebo odstranit komentáře
Použití komentářů v dokumentu Word (kromě změn stopy) je běžnou praxí při přezkumu dokumentů, zejména pokud existuje více recenzentů. Mohou nastat situace, kdy jediné, co potřebujete z dokumentu, jsou komentáře. Řekněte, že chcete vytvořit seznam zjištění přezkumu, nebo jste možná shromáždili všechny užitečné informace z dokumentu a chcete jednoduše odstranit zbytečné komentáře. Můžete chtít zobrazit nebo odstranit připomínky konkrétního recenzenta.
V tomto vzorku se podíváme na některé jednoduché metody shromažďování informací z komentářů v dokumentu a na odstranění připomínek z dokumentu. Konkrétně se postaráme o to, jak:
- Vyjádřit všechny připomínky z dokumentu nebo pouze ty, které učinil konkrétní autor
- Odstranit všechny připomínky z dokumentu nebo pouze od konkrétního autora
Jak extrahovat nebo odstranit komentáře
Kód v tomto vzorku je vlastně docela jednoduchý a všechny metody jsou založeny na stejném přístupu. Komentář v dokumentu Word představuje Comment objekt v Aspose.Words model objektu dokumentu. Pro sběr všech připomínek v dokumentu použijte GetChildNodes metoda s prvním parametrem nastaveným na NodeType.Comment. Ujistěte se, že druhý parametr GetChildNodes metoda je nastavena na true: to nutí GetChildNodes vybrat ze všech dětských uzlů rekurzivně, spíše než pouze sbírat okamžité děti.
Abychom ukázali, jak získat a odstranit připomínky z dokumentu, projdeme těmito kroky:
- Otevřít dokument Word pomocí Document třída
- Získat všechny připomínky z dokumentu do sbírky
- Chcete-li získat připomínky:
- Projděte sbírku pomocí každého provozovatele
- Výpis a výpis autora jméno, datum a čas a text všech komentářů
- Výpis a výpis jména autora, datum a čas a text komentářů napsaných konkrétním autorem, v tomto případě autora
- Odstranit komentáře:
- Přejít zpět přes sbírku pomocí pro operátora
- Odstranit připomínky
- Uložit změny
Jak extrahovat všechny komentáře
• GetChildNodes metoda je velmi užitečná a můžete ji použít pokaždé, když potřebujete získat seznam dokumentových uzlů jakéhokoli typu. Výsledný sběr nevytváří bezprostřední nadmořskou moc, protože uzly jsou vybrány do této sbírky pouze tehdy, když v ní vyjmenováváte nebo získáte přístupové položky.
Následující příklad kódu ukazuje, jak extrahovat jméno autora, datum a čas a text všech komentářů v dokumentu:
// 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; | |
} |
Jak získat připomínky určitého autora
Po výběru Comment uzly do sbírky, vše, co musíte udělat, je získat informace, které potřebujete. V tomto vzorku jsou iniciály autora, datum, čas a prostý text komentáře kombinovány do jednoho řetězce; místo toho se můžete rozhodnout jej uložit jiným způsobem.
Přetížená metoda, která vyjímá Komentáře od konkrétního autora, je téměř stejná, jen kontroluje jméno autora před přidáním informací do pole.
Následující příklad kódu ukazuje, jak extrahovat jméno autora, datum a čas a text připomínek uvedeného autora:
Jak odstranit komentáře
Pokud odstraňujete všechny komentáře, není třeba se pohybovat přes sbírku mazání komentářů jeden po druhém. Můžete je odstranit voláním Clear způsob sběru připomínek.
Následující příklad kódu ukazuje, jak odstranit všechny připomínky v dokumentu:
// 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(); | |
} |
Když potřebujete selektivní odstranění komentářů, proces se stává více podobný kódu, který jsme použili pro získávání komentářů.
Následující příklad kódu ukazuje, jak odstranit komentáře zadaného autora:
Hlavním bodem pro zdůraznění je použití pro obsluhu. Na rozdíl od jednoduché extrakce, zde chcete smazat komentář. Vhodným trikem je iterovat kolekci zpět od posledního Komentáře k prvnímu. Důvodem je, že pokud začnete od konce a posunete se dozadu, index předchozích položek zůstává nezměněn a můžete se vrátit k první položce ve sbírce.
Následující příklad kódu uvádí metody pro výpis a odstranění připomínek:
// 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); |
Jak odstranit komentář mezi CommentRangeStart a CommentRangeEnd
Použití Aspose.Words můžete také odstranit komentáře mezi CommentRangeStart a CommentRangeEnd uzly.
Následující příklad kódu ukazuje, jak odstranit text mezi CommentRangeStart a 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); |
Přidat nebo odstranit odpověď komentáře
• AddReply metoda přidává odpověď na tuto poznámku. Vezměte prosím na vědomí, že vzhledem k existující Microsoft V dokumentu je povolena pouze 1 úroveň odpovědí. Výjimku typu InvalidOperationException bude vznesena, pokud je tato metoda vyzvána ke stávající komentáři k odpovědi.
Můžete použít RemoveReply způsob odstranění specifikované odpovědi na tento komentář.
Následující příklad kódu ukazuje, jak přidat odpověď na komentář a odstranit odpověď komentáře:
// 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); |
Přečtěte si komentář
• Replies majetek vrací soubor Comment předměty, které jsou okamžitými dětmi uvedeného komentáře.
Následující příklad kódu ukazuje, jak iterovat prostřednictvím odpovědí na komentář a vyřešil je:
// 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; | |
} | |
} |