Microsoft Word предоставляет вам возможность добавлять комментарии к документам Word. Комментарии могут быть полезны в таких случаях, как предложения по улучшению документов или обмен мыслями по тексту. Могут быть ситуации, когда вам нужно программно управлять комментариями. С этой целью эта статья научит вас работать с комментариями в документах Word с помощью C++.

C++ API для работы с комментариями в документах Word

Aspose.Words for C++ — это собственная библиотека C++, позволяющая создавать, читать, изменять и преобразовывать документы Microsoft Word. Кроме того, он также поддерживает работу с комментариями в файлах DOCX и DOC. Вы можете либо установить API через NuGet, либо загрузить его напрямую из раздела Загрузки.

PM> Install-Package Aspose.Words.Cpp

Добавление комментариев к документам Word с помощью C++

Aspose.Words for C++ API предоставляет возможность добавлять комментарии с именем автора, инициалами и датой/временем. Ниже приведены шаги для добавления комментариев к документам Word.

В следующем примере кода показано, как добавлять комментарии к документам Word с помощью C++.

// Пути каталогов.
System::String sourceDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";

// Загрузите файл Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"Sample 1.docx");

// Создайте экземпляр класса DocumentBuilder
System::SharedPtr<DocumentBuilder> builder = System::MakeObject<DocumentBuilder>(doc);

// Добавить комментарий
System::SharedPtr<Comment> comment = System::MakeObject<Comment>(doc, u"Aspose", u"AFFA", 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."));

// Сохраните документ.
doc->Save(outputDataDir + u"AddCommentsToExistingDoc.docx");

Ниже приведено изображение вывода, сгенерированного примером кода.

Изображение вывода, сгенерированного примером кода

Чтение комментариев из документа Word

Ниже приведены шаги для чтения комментариев из документов Word.

Ниже приведен пример кода для чтения комментариев из документа Word с помощью C++.

// Пути каталогов.
System::String sourceDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";

// Загрузите файл Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"SampleComments.docx");

// Получить комментарии
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true);

// Перебрать все комментарии
for (System::SharedPtr<Comment> comment : System::IterateOver<System::SharedPtr<Comment>>(comments))
{
	// Распечатать информацию о комментарии
	std::cout << comment->get_Author() + u" " + comment->get_DateTime() + u" " + System::StaticCast<Node>(comment)->ToString(SaveFormat::Text);
}

Изменить комментарии в документе Word с помощью C++

Чтобы изменить комментарий, получите его с помощью метода NodeCollection->idxget(int32t index) и измените его в соответствии с вашими потребностями. Ниже приведены шаги по изменению комментариев в документе Word.

В следующем примере кода показано, как изменить комментарии в документе Word с помощью C++.

// Пути каталогов.
System::String sourceDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";

// Загрузите файл Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"SampleComments.docx");

// Получить комментарии
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true);

// Получить комментарий
System::SharedPtr<Comment> comment = System::DynamicCast<Comment>(comments->idx_get(0));

// Обновить текст комментария
comment->SetText(u"Updated Text");

// Сохраните документ.
doc->Save(outputDataDir + u"UpdatedComment.docx");

Удалить комментарии из документа Word с помощью С++

Aspose.Words for C++ API предоставляет несколько способов удаления комментариев из документов Word. В этом разделе вы узнаете, как удалить конкретный комментарий, комментарии автора и все комментарии с помощью C++.

Удалить конкретный комментарий

Ниже приведены шаги для удаления определенного комментария.

В следующем примере кода показано, как удалить определенный комментарий из документа Word с помощью C++.

// Пути каталогов.
System::String sourceDataDir = u"D:\\Work\\Aspose\\01_SourceDirectory\\";
System::String outputDataDir = u"D:\\Work\\Aspose\\02_OutputDirectory\\";

// Загрузите файл Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"SampleComments.docx");

// Получить комментарии
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true);

// Получить комментарий
System::SharedPtr<Comment> comment = System::DynamicCast<Comment>(comments->idx_get(2));

// Удалить комментарий
comment->Remove();

// Сохраните документ.
doc->Save(outputDataDir + u"DeleteSpecificComments.docx");

Удаление комментариев по автору

Ниже приведены шаги для удаления комментариев автора.

  • Во-первых, загрузите документ Word, используя класс Document.
  • Получите комментарии с помощью метода Document->GetChildNodes(Aspose::Words::NodeType nodeType, bool isDeep).
  • Пролистайте комментарии.
  • В цикле извлеките комментарий и сравните его автора. Если автор совпадает, удалите комментарий.
  • Наконец, сохраните документ, используя метод Document->Save(System::String fileName).

Ниже приведен пример кода для удаления комментариев автора с помощью C++.

// Пути каталогов.
System::String sourceDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";

// Загрузите файл Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"SampleComments.docx");

// Получить комментарии
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true);

// Прокрутите все комментарии и удалите те, которые написаны автором "Aspose".
for (int32_t i = comments->get_Count() - 1; i >= 0; i--)
{
	System::SharedPtr<Comment> comment = System::DynamicCast<Comment>(comments->idx_get(i));
	if (comment->get_Author() == u"Aspose")
	{
		comment->Remove();
	}
}

// Сохраните документ.
doc->Save(outputDataDir + u"DeleteCommentsByAuthor.docx");

Удалить все комментарии

Вместо того, чтобы удалять отдельные комментарии, вы можете удалить все комментарии сразу, используя метод NodeCollection->Clear(). Ниже приведены шаги для удаления всех комментариев из документа Word.

В следующем примере кода показано, как удалить все комментарии из документа Word с помощью C++.

// Пути каталогов.
System::String sourceDataDir = u"SourceDirectory\\";
System::String outputDataDir = u"OutputDirectory\\";

// Загрузите файл Word
System::SharedPtr<Document> doc = System::MakeObject<Document>(sourceDataDir + u"SampleComments.docx");

// Получить комментарии
System::SharedPtr<NodeCollection> comments = doc->GetChildNodes(NodeType::Comment, true);

// Удалить все комментарии.
comments->Clear();

// Сохраните документ.
doc->Save(outputDataDir + u"DeleteAllComments.docx");

Получить бесплатную лицензию

Вы можете попробовать API без ограничений по ознакомительной версии, запросив бесплатную временную лицензию.

Вывод

В этой статье вы узнали, как работать с комментариями в документах Word с помощью C++. В частности, вы узнали, как добавлять, читать, редактировать и удалять комментарии. Кроме того, вы увидели, как удалить конкретный комментарий, комментарии автора и все комментарии с помощью Aspose.Words for C++ API. API предоставляет множество дополнительных функций для автоматизации задач, связанных с Word. Вы можете подробно изучить API, посетив официальную документацию. Если у вас возникнут вопросы, свяжитесь с нами на нашем бесплатном форуме поддержки.

Смотрите также