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

相關問題