Форматирование определенных найденных слов в текстовой строке в Crystal Reports

У меня есть список слов, которые я ищу в поле «Примечания» в таблице, и когда я отображаю это поле «Примечания» в своем отчете Crystal Report, я хотел бы каким-то образом выделить (изменить цвет шрифта) только для определенного помеченного слова в пределах текстовая строка заметки.

Пример: список слов: Джо, Сара, Эми, Джефф текст заметки: «Я зашел и поговорил с Джо, чтобы проверить состояние счета, и Эми поздоровалась».

желаемый результат: текст примечания отображается в отчете со словами «Джо» и «Эми», выделенными красным цветом.

Я пытался использовать RTF и HTML в параметре «Интерпретация текста» в свойствах, где я могу успешно отформатировать текст заметки для любого из этих текстовых выходов. Однако я до сих пор не знаю правильного кода для выделения и форматирования определенных слов из моего списка, особенно если в тексте поля появляется более одного из моих слов.

Заранее спасибо за любую помощь, которую вы можете мне оказать!


person VerityBanks    schedule 17.03.2011    source источник


Ответы (2)


Я делал что-то подобное пару лет назад:

StringVar SearchText := "has";
StringVar Htm1 := "<b>";
StringVar Htm2 := "</b>";
StringVar Result := ""; 
StringVar Temp := ""; 
NumberVar Start := 1;  
NumberVar Ln := Len(SearchText);  
NumberVar Loc := Instr({@TextField}, SearchText);  
While Loc > 0 Do (  
    Temp := Mid({@TextField}, Start, Loc - Start) + Htm1 + Mid({@TextField}, Loc, Ln) & Htm2;
    Result := Result + Temp;  
    Start := Loc + Ln;  
    Loc := Instr(Start, {@TextField}, SearchText);  
);  
Temp := Mid({@TextField}, Start);  
Result := Result + Temp;  
Result  

В этом случае я ищу поле с именем @TextField для значения в SearchText и выделяю значения жирным шрифтом. Вероятно, не самый эффективный код, но он работает.

person Judah Sali    schedule 19.03.2011
comment
Это гениально (для меня!), Работает отлично! Думаю, теперь я могу взять этот код и заставить его работать для всего моего списка слов. Большое спасибо за ответ! - person VerityBanks; 21.03.2011

Я знаю, что это старо, но я нашел его в поисках проблемы, которая у меня была. Ответный код работает, но мне он показался немного загроможденным, а также мне нужно было предоставить список слов для выделения. Вот что я придумал.

Local Stringvar Array searchwords:=MakeArray("Joe", "Sarah", "Amy");
local stringvar notes:={Notes};
local numbervar i;
for i:=1 to count(searchwords) do (
    notes:=replace(notes,searchwords[i],"<font color='red'>" & searchwords[i] & "</font>",1,-1,1);
);
notes

Единственное, что следует отметить, это то, что это найдет результаты, когда искомое слово является частью более крупного слова, т. Е. «РАБОТА» будет выделено жирным шрифтом в «Мастерской».

Хотя это работает для наших нужд, поскольку мы хотим, чтобы «работа», «работа», «работа» и т. д. выделялись, кристаллические отчеты, не поддерживающие Regex, являются довольно большим недостатком.

person Schugs    schedule 15.04.2014
comment
С ним намного проще работать... Ваше решение чувствительно к регистру? - person Sun; 22.04.2014
comment
Этот код использует функцию замены Crystal, которую можно сделать чувствительной к регистру или нечувствительной, используя последний аргумент. См. ссылку pic.dhe.ibm.com/infocenter/radhelp/v7r5/ - person Schugs; 23.04.2014
comment
Следует отметить, что, поскольку он ищет всю строку по одному слову за раз, если вы вставите слово, которое также находится позже в поисковых словах, это, скорее всего, будет иметь нежелательные последствия. т. е. в примере, где мы ищем имена, скажем, одно из имен, которые мы хотели, было Red (имя мальчика), которое затем заменило бы «красный» обозначение цвета из тегов шрифта. Очевидно, что есть способы обойти эту проблему, используя шестнадцатеричный код вместо имен цветов, но об этом стоит помнить. - person Schugs; 23.04.2014
comment
Спасибо за вашу ссылку и объяснение. Итак, 1, -1, 1 означает, что сравнение нечувствительно к регистру, но строка замены будет литеральной строкой в ​​​​массиве? Итак, если в поле «Примечания» есть слово JOE, формула заменит его на ‹font color='red'›Joe‹/font›, переводя верхний регистр в правильный регистр? - person Sun; 23.04.2014