Работа с текстом в таблице

Как упоминалось в предыдущих статьях, таблица обычно содержит обычный текст, хотя в ячейки таблицы может быть помещено другое содержимое, например изображения или даже другие таблицы.

Добавление текста или другого содержимого в таблицу осуществляется с помощью соответствующих методов класса DocumentBuilder и описано в статье “Создание таблицы”. В этой статье мы поговорим о том, как работать с текстом в уже существующей таблице.

Заменить текст в таблице

Таблица, как и любой другой узел в Aspose.Words, имеет доступ к объекту Range. Используя объект table range, вы можете заменить текст в таблице.

В настоящее время поддерживается возможность использования специальных символов при замене, поэтому можно заменить существующий текст текстом, состоящим из нескольких абзацев. Для этого вам необходимо использовать специальные метасимволы, описанные в соответствующем методе Replace.

В следующем примере кода показано, как заменить все экземпляры текстовой строки в ячейках всей таблицы:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
table->get_Range()->Replace(u"Carrots", u"Eggs", MakeObject<FindReplaceOptions>(FindReplaceDirection::Forward));
table->get_LastRow()->get_LastCell()->get_Range()->Replace(u"50", u"20", MakeObject<FindReplaceOptions>(FindReplaceDirection::Forward));
doc->Save(ArtifactsDir + u"FindAndReplace.ReplaceTextInTable.docx");
view raw replace-text.h hosted with ❤ by GitHub

Извлечение обычного текста из таблицы или ячейки

Используя объект Range, вы также можете вызывать методы для всего диапазона таблиц и извлекать таблицу в виде обычного текста. Для этого используйте свойство Text.

В следующем примере кода показано, как напечатать текстовый диапазон таблицы:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
// The range text will include control characters such as "\a" for a cell.
// You can call ToString and pass SaveFormat.Text on the desired node to find the plain text content.
std::cout << "Contents of the table: " << std::endl;
std::cout << table->get_Range()->get_Text() << std::endl;
view raw extract-text.h hosted with ❤ by GitHub

Тот же метод используется только для извлечения содержимого из отдельных ячеек таблицы.

В следующем примере кода показано, как напечатать текстовый диапазон элементов строк и таблиц:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
std::cout << "\nContents of the row: " << std::endl;
std::cout << table->get_Rows()->idx_get(1)->get_Range()->get_Text() << std::endl;
std::cout << "\nContents of the cell: " << std::endl;
std::cout << table->get_LastRow()->get_LastCell()->get_Range()->get_Text() << std::endl;

Работа с альтернативным текстом таблицы

Таблицы Microsoft Word имеют значения table title и table description, которые обеспечивают альтернативное текстовое представление информации, содержащейся в таблице.

В Aspose.Words вы также можете добавить заголовок и описание таблицы, используя свойства Title и Description. Эти свойства имеют значение для DOCX документов, соответствующих стандарту ISO/IEC 29500. При сохранении в форматах, более ранних, чем ISO/IEC 29500, эти свойства игнорируются.

В следующем примере кода показано, как задать свойства заголовка и описания таблицы:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C.git.
auto doc = MakeObject<Document>(MyDir + u"Tables.docx");
auto table = System::ExplicitCast<Table>(doc->GetChild(NodeType::Table, 0, true));
table->set_Title(u"Test title");
table->set_Description(u"Test description");
auto options = MakeObject<OoxmlSaveOptions>();
options->set_Compliance(OoxmlCompliance::Iso29500_2008_Strict);
doc->get_CompatibilityOptions()->OptimizeFor(Settings::MsWordVersion::Word2016);
doc->Save(ArtifactsDir + u"WorkingWithTableStylesAndFormatting.TableTitleAndDescription.docx", options);