1

我有一个单词列表,我通过表中的“Notes”字段进行搜索,当我在Crystal Report中显示该Notes字段时,我希望以某种方式突出显示(仅更改字体颜色)笔记文本字符串中特定的标记字。在Crystal Reports的文本字符串中格式化特定发现的单词

例如: 单词列表:Joe,Sarah,Amy,Jeff 注意文字:“我停下来和Joe谈话检查帐户状态,Amy打招呼。”

预期结果:注意文本在报告中以红色字显示“Joe”和“Amy”。

我试过使用RTF和HTML在属性中的文本解释参数,在那里我可以成功地格式化注释文本到这些文本输出。但是,我仍然不知道正确的代码来隔离和格式化我的列表中的特定单词,特别是如果我的单词有多于一个单词出现在字段文本中。

在此先感谢您提供的任何帮助!

回答

0

我做了一个类似于几年前的东西:

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价值和上午加粗值的字段。可能不是最有效的代码,但它的工作原理。

+0

这太棒了(对我来说),完美的作品!我想我现在可以使用这些代码,并使其适用于我的整个单词列表。 非常感谢您的回复! – VerityBanks 2011-03-21 13:50:03

1

我知道这是旧的,但我发现它寻找我遇到的问题。回答的代码有效,但对我来说似乎有点混乱,而且我需要能够提供一个单词列表来突出显示。这是我想出来的。

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 

需要注意的唯一的事情,就是这个会发现结果时的搜索词是一个较大单词的一部分 - 即“工作”将在“车间”加粗。

虽然这对我们的需要,因为我们希望“工作”,“工作”,“工作”等所有亮点,水晶报告不支持正则表达式是一个相当大的缺点。

+0

看起来更容易与...一起工作您的解决方案是否区分大小写? – Sun 2014-04-22 15:23:11

+0

该代码使用Crystal函数“Replace”,可以使用最后一个参数进行区分大小写或不敏感。请参考http://pic.dhe.ibm.com/infocenter/radhelp/v7r5/index.jsp?topic=%2Fcom.businessobjects.integration.eclipse.designer.doc%2Fhtml%2Ftopic649.html – Schugs 2014-04-23 16:15:31

+0

有一点需要注意,因为它一次搜索整个字符串中的一个单词,如果插入一个单词,这也是搜索词后面的单词,那么它最有可能是不受欢迎的影响。 即在我们称为名字的例子中,让我们说我们想要的名字之一是“红色”(男孩的名字),然后用字体标签替换'红色'的颜色记号。很明显,通过使用十六进制代码而不是颜色名称可以解决此问题,但值得注意的是要注意它。 – Schugs 2014-04-23 16:18:30

相关问题