Поиск в документе
Для поиска в текстовом или табличном документе необходимо создать экземпляр класса Search посредством вызова createSearch(document), затем использовать метод Search::findText (см. Рисунок).
Примеры поиска в документе
// Поиск по всему документу
std::shared_ptr<Search> search = createSearch(document);
std::shared_ptr<Enumerator<Range>> searchResult = search->findText("API", CaseSensitive::Yes);
// Поиск в диапазоне блока
Range firstBlockRange = document.getBlocks().getBlock(0).get().getRange();
std::shared_ptr<Search> search = createSearch(document);
std::shared_ptr<Enumerator<Range>> searchResult = search->findText("API", firstBlockRange, CaseSensitive::No);
// Поиск в диапазоне ячеек
Table table = document.getBlocks().getTable(0).get();
CellRange cellRange = table.getCellRange("A1:B2");
std::shared_ptr<Search> search = createSearch(document);
std::shared_ptr<Enumerator<Range>> searchResult = search->findText("API", cellRange, CaseSensitive::Yes);
// Поиск в таблице
Table table = document.getBlocks().getTable(0).get();
std::shared_ptr<Search> search = createSearch(document);
std::shared_ptr<Enumerator<Range>> searchResult = search->findText("API", table, CaseSensitive::Yes);
// Отображение результатов поиска
while (searchResult->isValid())
{
Range range = searchResult->getCurrent();
std::printf("%s", range.extractText().c_str());
searchResult->goToNext();
}
Для поиска ячеек в табличном документе используйте методы Table::find и CellRange::find.
Пример поиска ячеек в табличном документе
Table sheet = document.getBlocks().getTable(0).get();
TableSearchSettings searchProps = TableSearchSettings();
searchProps.caseSensitive = CaseSensitive::No;
searchProps.matchBehaviour = TableSearchSettings::MatchBehaviour::Glob;
searchProps.searchIn = TableSearchSettings::SearchProperty::Value;
searchProps.wholeWords = true;
auto results = sheet.find("*eye", searchProps);
while (results->isValid())
{
Cell cell = results->getCurrent();
std::printf("%s", cell.getFormattedValue().c_str()); // Steeleye Stout
results->goToNext();
}
Пример форматирования результатов поиска
Table sheet = document.getBlocks().getTable(0).get();
std::shared_ptr<Search> search = createSearch(document);
std::string string = "MyOffice";
auto ranges = search->findText(string, sheet);
while (ranges->isValid())
{
Range range = ranges->getCurrent();
TextProperties props = range.getTextProperties();
props.bold = true;
range.setTextProperties(props);
ranges->goToNext();
}