Werken met Comments
Online proberen
U kunt deze functionaliteit proberen met onze Gratis online annotaties verwijderen.
Aspose.Words stelt gebruikers in staat om met opmerkingen te werken – opmerkingen in een document in Aspose.Words worden weergegeven door de Comment - klasse. Gebruik ook de klassen CommentRangeStart en CommentRangeEnd om het tekstgebied op te geven dat aan een opmerking moet worden gekoppeld.
Een opmerking toevoegen
Met Aspose.Words kunt u op verschillende manieren opmerkingen toevoegen:
- De Comment - Klasse gebruiken
- De klassen CommentRangeStart en CommentRangeEnd gebruiken
Het volgende codevoorbeeld laat zien hoe u een opmerking toevoegt aan een alinea met behulp van de Comment - Klasse:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithComments(); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc); | |
builder->Write(u"Some text is added."); | |
System::SharedPtr<Comment> comment = System::MakeObject<Comment>(doc, u"Awais Hafeez", u"AH", System::DateTime::get_Today()); | |
builder->get_CurrentParagraph()->AppendChild(comment); | |
comment->get_Paragraphs()->Add(System::MakeObject<Paragraph>(doc)); | |
comment->get_FirstParagraph()->get_Runs()->Add(System::MakeObject<Run>(doc, u"Comment text.")); | |
System::String outputPath = outputDataDir + u"AddComments.doc"; | |
// Save the document. | |
doc->Save(outputPath); |
Het volgende codevoorbeeld laat zien hoe u een opmerking toevoegt aan een alinea met behulp van een tekstgebied en de klassen CommentRangeStart en CommentRangeEnd:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directory. | |
System::String outputDataDir = GetOutputDataDir_WorkingWithComments(); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(); | |
System::SharedPtr<Paragraph> para1 = System::MakeObject<Paragraph>(doc); | |
System::SharedPtr<Run> run1 = System::MakeObject<Run>(doc, u"Some "); | |
System::SharedPtr<Run> run2 = System::MakeObject<Run>(doc, u"text "); | |
para1->AppendChild(run1); | |
para1->AppendChild(run2); | |
doc->get_FirstSection()->get_Body()->AppendChild(para1); | |
System::SharedPtr<Paragraph> para2 = System::MakeObject<Paragraph>(doc); | |
System::SharedPtr<Run> run3 = System::MakeObject<Run>(doc, u"is "); | |
System::SharedPtr<Run> run4 = System::MakeObject<Run>(doc, u"added "); | |
para2->AppendChild(run3); | |
para2->AppendChild(run4); | |
doc->get_FirstSection()->get_Body()->AppendChild(para2); | |
System::SharedPtr<Comment> comment = System::MakeObject<Comment>(doc, u"Awais Hafeez", u"AH", System::DateTime::get_Today()); | |
comment->get_Paragraphs()->Add(System::MakeObject<Paragraph>(doc)); | |
comment->get_FirstParagraph()->get_Runs()->Add(System::MakeObject<Run>(doc, u"Comment text.")); | |
System::SharedPtr<CommentRangeStart> commentRangeStart = System::MakeObject<CommentRangeStart>(doc, comment->get_Id()); | |
System::SharedPtr<CommentRangeEnd> commentRangeEnd = System::MakeObject<CommentRangeEnd>(doc, comment->get_Id()); | |
run1->get_ParentNode()->InsertAfter(commentRangeStart, run1); | |
run3->get_ParentNode()->InsertAfter(commentRangeEnd, run3); | |
commentRangeEnd->get_ParentNode()->InsertAfter(comment, commentRangeEnd); | |
System::String outputPath = outputDataDir + u"AnchorComment.doc"; | |
// Save the document. | |
doc->Save(outputPath); |
Opmerkingen uitpakken of verwijderen
Het gebruik van opmerkingen in een Word document (naast het bijhouden van wijzigingen) is een gangbare praktijk bij het beoordelen van documenten, vooral wanneer er meerdere reviewers zijn. Er kunnen situaties zijn waarin het enige wat je nodig hebt van een document de opmerkingen zijn. Stel dat u een lijst met beoordelingsresultaten wilt genereren, of misschien hebt u alle nuttige informatie uit het document verzameld en wilt u gewoon onnodige opmerkingen verwijderen. Misschien wilt u de opmerkingen van een bepaalde reviewer bekijken of verwijderen.
In dit voorbeeld gaan we kijken naar enkele eenvoudige methoden voor het verzamelen van informatie uit de opmerkingen in een document en voor het verwijderen van opmerkingen uit een document. In het bijzonder behandelen we hoe:
- Haal alle opmerkingen uit een document of alleen die van een bepaalde auteur.
- Verwijder alle opmerkingen uit een document of alleen van een bepaalde auteur.
Hoe opmerkingen uitpakken of verwijderen
De code in dit voorbeeld is eigenlijk vrij eenvoudig en alle methoden zijn gebaseerd op dezelfde aanpak. Een opmerking in een Word document wordt weergegeven door een Comment object in het Aspose.Words document object model. Als u alle opmerkingen in een document wilt verzamelen, gebruikt u de methode GetChildNodes met de eerste parameter ingesteld op NodeType.Comment. Zorg ervoor dat de tweede parameter van de GetChildNodes Methode is ingesteld op true: dit dwingt de GetChildNodes om recursief te selecteren uit alle kindknooppunten, in plaats van alleen de directe kinderen te verzamelen.
Om te illustreren hoe u opmerkingen uit een document kunt extraheren en verwijderen, doorlopen we de volgende stappen:
- Een Word - document openen met de Document - Klasse
- Alle opmerkingen uit het document opnemen in een verzameling
- Om opmerkingen te extraheren:
- Ga door de collectie met behulp van de foreach operator
- Uittreksel en een lijst van de auteur naam, datum & tijd en tekst van alle opmerkingen
- Uittreksel en een lijst van de auteur naam, datum & tijd en tekst van opmerkingen geschreven door een specifieke auteur, in dit geval, de auteur ‘ks’
- Opmerkingen verwijderen:
- Ga terug door de collectie met behulp van de voor de operator
- Reacties verwijderen
- De wijzigingen opslaan
Hoe alle opmerkingen te extraheren
De methode GetChildNodes is erg handig en u kunt deze elke keer gebruiken als u een lijst met documentknooppunten van elk type nodig hebt. De resulterende verzameling maakt geen directe overhead omdat de knooppunten alleen in deze verzameling worden geselecteerd wanneer u items in deze verzameling opnoemt of opent.
Het volgende codevoorbeeld laat zien hoe u de auteursnaam, datum en tijd en tekst van alle opmerkingen in het document kunt extraheren:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
std::vector<System::String> ExtractComments(const System::SharedPtr<Document>& doc) | |
{ | |
std::vector<System::String> collectedComments; | |
// Collect all comments in the document | |
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true); | |
// Look through all comments and gather information about them. | |
for (System::SharedPtr<Comment> comment : System::IterateOver<System::SharedPtr<Comment>>(comments)) | |
{ | |
collectedComments.push_back(comment->get_Author() + u" " + comment->get_DateTime() + u" " + System::StaticCast<Node>(comment)->ToString(SaveFormat::Text)); | |
} | |
return collectedComments; | |
} |
Hoe opmerkingen van een bepaalde auteur te extraheren
Nadat u Commentaarknooppunten in een verzameling hebt geselecteerd, hoeft u alleen maar de informatie te extraheren die u nodig hebt. In dit voorbeeld worden de initialen van de auteur, datum, tijd en de platte tekst van de opmerking gecombineerd tot één tekenreeks; u kunt ervoor kiezen om deze op een andere manier op te slaan.
De overbelaste methode die de opmerkingen van een bepaalde auteur extraheert, is bijna hetzelfde, het controleert alleen de naam van de auteur voordat de informatie in de array wordt toegevoegd.
Het volgende codevoorbeeld laat zien hoe u de auteursnaam, datum en tijd en tekst van de opmerkingen van de opgegeven auteur kunt extraheren:
Hoe te verwijderen opmerkingen
Als u alle opmerkingen verwijdert, hoeft u niet één voor één door de verzameling te bladeren om opmerkingen te verwijderen; U kunt ze verwijderen door NodeCollection.Clear
op te roepen in de verzameling opmerkingen.
Het volgende codevoorbeeld laat zien hoe u alle opmerkingen in het document kunt verwijderen:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
void RemoveComments(const System::SharedPtr<Document>& doc) | |
{ | |
// Collect all comments in the document | |
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true); | |
// Remove all comments. | |
comments->Clear(); | |
} |
Wanneer u opmerkingen selectief moet verwijderen, lijkt het proces meer op de code die we hebben gebruikt voor het extraheren van opmerkingen.
Het volgende codevoorbeeld laat zien hoe u opmerkingen van de opgegeven auteur kunt verwijderen:
Het belangrijkste punt om hier te benadrukken is het gebruik van de for-operator. In tegenstelling tot de eenvoudige extractie, wilt u hier een opmerking verwijderen. Een geschikte truc is om de verzameling achteruit te herhalen van de laatste opmerking naar de eerste. De reden hiervoor als u vanaf het einde begint en achteruit gaat, blijft de index van de voorgaande items ongewijzigd en kunt u terugwerken naar het eerste item in de collectie.
Het volgende codevoorbeeld toont de methoden voor het extraheren en verwijderen van opmerkingen:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directories. | |
System::String inputDataDir = GetInputDataDir_WorkingWithComments(); | |
System::String outputDataDir = GetOutputDataDir_WorkingWithComments(); | |
// Open the document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"TestFile.doc"); | |
// Extract the information about the comments of all the authors. | |
for (System::String const &comment : ExtractComments(doc)) | |
{ | |
std::cout << comment.ToUtf8String(); | |
} | |
// Remove comments by the "pm" author. | |
RemoveComments(doc, u"pm"); | |
std::cout << "Comments from \"pm\" are removed!" << std::endl; | |
// Extract the information about the comments of the "ks" author. | |
for (System::String const &comment: ExtractComments(doc, u"ks")) | |
{ | |
std::cout << comment.ToUtf8String(); | |
} | |
//Read the comment's reply and resolve them. | |
CommentResolvedandReplies(doc); | |
// Remove all comments. | |
RemoveComments(doc); | |
std::cout << "All comments are removed!" << std::endl; | |
System::String outputPath = outputDataDir + u"ProcessComments.doc"; | |
// Save the document. | |
doc->Save(outputPath); |
Een Opmerking verwijderen tussen CommentRangeStart en CommentRangeEnd
Met behulp van Aspose.Words kunt u ook opmerkingen verwijderen tussen de knooppunten CommentRangeStart en CommentRangeEnd.
Het volgende codevoorbeeld laat zien hoe u tekst tussen CommentRangeStart en CommentRangeEndverwijdert:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directories. | |
System::String inputDataDir = GetInputDataDir_WorkingWithComments(); | |
System::String outputDataDir = GetOutputDataDir_WorkingWithComments(); | |
// Open the document. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"TestFile.doc"); | |
System::SharedPtr<CommentRangeStart> commentStart = System::DynamicCast<CommentRangeStart>(doc->GetChild(NodeType::CommentRangeStart, 0, true)); | |
System::SharedPtr<CommentRangeEnd> commentEnd = System::DynamicCast<CommentRangeEnd>(doc->GetChild(NodeType::CommentRangeEnd, 0, true)); | |
System::SharedPtr<Node> currentNode = commentStart; | |
bool isRemoving = true; | |
while (currentNode != nullptr && isRemoving) | |
{ | |
if (currentNode->get_NodeType() == NodeType::CommentRangeEnd) | |
{ | |
isRemoving = false; | |
} | |
System::SharedPtr<Node> nextNode = currentNode->NextPreOrder(doc); | |
currentNode->Remove(); | |
currentNode = nextNode; | |
} | |
System::String outputPath = outputDataDir + u"RemoveRegionText.doc"; | |
// Save the document. | |
doc->Save(outputPath); |
Reactie toevoegen en verwijderen
De methode AddReply voegt een antwoord toe aan deze opmerking. Houd er rekening mee dat vanwege de bestaande Microsoft office-beperkingen slechts 1 niveau van antwoorden in het document is toegestaan. Een uitzondering van het type InvalidOperationException zal worden gemaakt als deze methode wordt aangeroepen op de bestaande reactie.
U kunt de methode RemoveReply gebruiken om het opgegeven antwoord op deze opmerking te verwijderen.
Het volgende codevoorbeeld laat zien hoe u een antwoord aan een opmerking kunt toevoegen en het antwoord van een opmerking kunt verwijderen:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
// The path to the documents directories. | |
System::String inputDataDir = GetInputDataDir_WorkingWithComments(); | |
System::String outputDataDir = GetOutputDataDir_WorkingWithComments(); | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"TestFile.doc"); | |
System::SharedPtr<Comment> comment = System::DynamicCast<Comment>(doc->GetChild(NodeType::Comment, 0, true)); | |
//Remove the reply | |
comment->RemoveReply(comment->get_Replies()->idx_get(0)); | |
//Add a reply to comment | |
comment->AddReply(u"John Doe", u"JD", System::DateTime(2017, 9, 25, 12, 15, 0), u"New reply"); | |
System::String outputPath = outputDataDir + u"CommentReply.doc"; | |
// Save the document to disk. | |
doc->Save(outputPath); |
Lees reactie Reactie
De eigenschap Replies retourneert een verzameling van de Comment objecten die directe kinderen zijn van de opgegeven opmerking.
Het volgende codevoorbeeld laat zien hoe u de antwoorden van een opmerking kunt herhalen en oplossen:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
void CommentResolvedandReplies(const System::SharedPtr<Document>& doc) | |
{ | |
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true); | |
System::SharedPtr<Comment> parentComment = System::DynamicCast<Comment>(comments->idx_get(0)); | |
for (System::SharedPtr<Comment> childComment : System::IterateOver<System::SharedPtr<Comment>>(parentComment->get_Replies())) | |
{ | |
// Get comment parent and status. | |
std::cout << childComment->get_Ancestor()->get_Id() << std::endl << childComment->get_Done() << std::endl; | |
// And update comment Done mark. | |
childComment->set_Done(true); | |
} | |
} |