Crystal reports 格式化Crystal Reports中文本字符串中找到的特定单词

Crystal reports 格式化Crystal Reports中文本字符串中找到的特定单词,crystal-reports,reporting,string-formatting,text-parsing,Crystal Reports,Reporting,String Formatting,Text Parsing,我有一个单词列表,我正在表格中的“Notes”字段中搜索,当我在Crystal Report中显示该Notes字段时,我希望以某种方式高亮显示(更改字体颜色)注释文本字符串中的特定标记单词 例如: 词表:乔、萨拉、艾米、杰夫 便笺文字:“我路过乔家,与乔交谈,查看账户状态,艾米打了个招呼。” 预期结果:注意报告中显示的文本中有红色的“Joe”和“Amy” 我已经尝试在属性中的文本解释参数中使用RTF和HTML,在这里我可以成功地将注释文本格式化为这些文本输出中的任何一个。但是,我仍然不知道从我的

我有一个单词列表,我正在表格中的“Notes”字段中搜索,当我在Crystal Report中显示该Notes字段时,我希望以某种方式高亮显示(更改字体颜色)注释文本字符串中的特定标记单词

例如: 词表:乔、萨拉、艾米、杰夫 便笺文字:“我路过乔家,与乔交谈,查看账户状态,艾米打了个招呼。”

预期结果:注意报告中显示的文本中有红色的“Joe”和“Amy”

我已经尝试在属性中的文本解释参数中使用RTF和HTML,在这里我可以成功地将注释文本格式化为这些文本输出中的任何一个。但是,我仍然不知道从我的列表中分离和格式化特定单词的正确代码,特别是如果字段文本中显示了多个单词


提前谢谢你能给我的任何帮助

几年前我做了类似的事情:

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  
StringVar SearchText:=“has”;
StringVar Htm1:=“”;
StringVar Htm2:=“”;
StringVar结果:=“”;
StringVar温度:=“”;
号码起始:=1;
numbervarln:=Len(SearchText);
numbervarloc:=Instr({@TextField},SearchText);
当Loc>0时,Do(
Temp:=Mid({@TextField},Start,Loc-Start)+Htm1+Mid({@TextField},Loc,Ln)和Htm2;
结果:=结果+温度;
开始:=Loc+Ln;
Loc:=Instr(开始,{@TextField},SearchText);
);  
Temp:=Mid({@TextField},Start);
结果:=结果+温度;
结果

在本例中,我在名为@TextField的字段中搜索SearchText中的值,并将这些值加粗。可能不是最有效的代码,但它可以工作。

几年前我做了类似的事情:

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  
StringVar SearchText:=“has”;
StringVar Htm1:=“”;
StringVar Htm2:=“”;
StringVar结果:=“”;
StringVar温度:=“”;
号码起始:=1;
numbervarln:=Len(SearchText);
numbervarloc:=Instr({@TextField},SearchText);
当Loc>0时,Do(
Temp:=Mid({@TextField},Start,Loc-Start)+Htm1+Mid({@TextField},Loc,Ln)和Htm2;
结果:=结果+温度;
开始:=Loc+Ln;
Loc:=Instr(开始,{@TextField},SearchText);
);  
Temp:=Mid({@TextField},Start);
结果:=结果+温度;
结果

在本例中,我在名为@TextField的字段中搜索SearchText中的值,并将这些值加粗。可能不是最有效的代码,但它可以工作。

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

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
localstringvar数组searchwords:=MakeArray(“乔”、“萨拉”、“艾米”);
局部stringvar注释:={notes};
局部数i;
对于i:=1来计数(搜索词)do(
注释:=替换(注释、搜索词[i]、“”和搜索词[i]、“”1、-1,1);
);
笔记
唯一需要注意的是,当搜索词是较大单词的一部分时,这将查找结果,即“WORK”将在“Workshop”中加粗


虽然这能满足我们的需要,因为我们希望“工作”、“工作”、“工作”等都能突出,但crystal reports不支持Regex是一个很大的缺点。

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

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
localstringvar数组searchwords:=MakeArray(“乔”、“萨拉”、“艾米”);
局部stringvar注释:={notes};
局部数i;
对于i:=1来计数(搜索词)do(
注释:=替换(注释、搜索词[i]、“”和搜索词[i]、“”1、-1,1);
);
笔记
唯一需要注意的是,当搜索词是较大单词的一部分时,这将查找结果,即“WORK”将在“Workshop”中加粗


虽然这能满足我们的需要,因为我们希望“工作”、“工作”、“工作”等都能突出,但crystal reports不支持Regex是一个很大的缺点。

这太棒了(对我来说!),效果非常好!我想我现在可以使用这个代码,让它适用于我的整个单词列表。非常感谢您的回复!这太棒了(对我来说!),效果非常好!我想我现在可以使用这个代码,让它适用于我的整个单词列表。非常感谢您的回复!看起来更容易相处。。。您的解决方案区分大小写吗?此代码使用Crystal函数“Replace”,它可以区分大小写,也可以使用最终参数不区分大小写。请注意一件事,因为它一次搜索整个字符串一个单词,如果您插入一个单词,也就是后面的搜索单词,它很可能会产生不必要的影响。i、 e.在我们使用saerching表示姓名的示例中,假设我们想要的一个名字是“Red”(男孩的名字),它将取代字体标签中的颜色符号“Red”。很明显,有办法解决这个问题,使用十六进制代码而不是颜色名称,但值得注意的是要注意它。感谢您的链接和解释。所以1,-1,1意味着比较不区分大小写,但是替换字符串将是数组中的文本字符串?因此,如果Notes字段中有“JOE”一词,那么公式将用JOE替换它,使大写字母变成正确的大小写?看起来更容易使用。。。您的解决方案区分大小写吗?此代码使用Crystal函数“Replace”,它可以区分大小写,也可以使用最终参数不区分大小写。请注意一件事,因为它一次搜索整个字符串一个单词,如果您插入一个单词,也就是后面的搜索单词,它很可能会产生不必要的影响。i、 e.在我们用saerching表示名字的例子中,假设我们想要的名字中有一个是“Red”(男孩的名字),它将取代颜色notat的“Red”