【问题标题】:Formatting specific found words within a text string in Crystal Reports在 Crystal Reports 中格式化文本字符串中找到的特定单词
【发布时间】:2011-03-17 21:01:25
【问题描述】:

我有一个单词列表,我正在通过表格中的“备注”字段搜索,当我在 Crystal Report 中显示该备注字段时,我想以某种方式仅突出显示(更改字体颜色)特定的注释文本字符串中的标记词。

示例: 词表:乔、莎拉、艾米、杰夫 备注文本:“我路过并与乔交谈以检查帐户状态,艾米打了招呼。”

期望的结果:报告中的注释文本显示为红色,“Joe”和“Amy”字样。

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

提前感谢您能给我的任何帮助!

【问题讨论】:

    标签: crystal-reports reporting string-formatting text-parsing


    【解决方案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
    

    唯一需要注意的是,当搜索词是较大词的一部分时,这将找到结果 - 即“工作”在“工作坊”中会加粗。

    虽然这可以满足我们的需求,因为我们希望“工作”、“工作”、“工作”等都突出显示,但不支持正则表达式的水晶报告是一个很大的缺点。

    【讨论】:

    • 看起来更容易使用...您的解决方案区分大小写吗?
    • 此代码使用 Crystal 函数“替换”,可以使用最终参数进行区分大小写或不区分大小写。请参考pic.dhe.ibm.com/infocenter/radhelp/v7r5/…
    • 有一点需要注意,因为它一次搜索整个字符串一个词,如果你插入一个词,也就是在搜索词的后面,它很可能会产生不必要的影响。即在我们正在搜索名称的示例中,假设我们想要的名称之一是“红色”(男孩名字),然后它将替换字体标签中的“红色”颜色符号。显然有一些方法可以通过使用十六进制代码而不是颜色名称来解决这个问题,但值得注意的是要注意这一点。
    • 感谢您的链接和解释。所以 1, -1, 1 表示比较不区分大小写,但替换字符串将是数组中的文字字符串?那么,如果 Notes 字段有单词“JOE”,公式将用 Joe 替换它,使大写变为正确的大小写?
    【解决方案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 中的值,并将这些值加粗。可能不是最有效的代码,但它确实有效。

    【讨论】:

    • 这太棒了(对我来说!),完美!我想我现在可以使用此代码并使其适用于我的整个单词列表。非常感谢您的回复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多