哇。你喜歡複雜的分層問題。
第一個問題是訪問的值,它如所描述你沒有作爲直接完成。事實上,您使用Describe()來獲取值。與唯一的問題是,它回來作爲以下格式的字符串,用引號括起來(注意,我們使用的是標準的PowerScript串符號的地方〜t是一個選項卡)
"<DefaultValue>~t<Expression>"
你想表達,所以你必須將其解析出來,同時放下引號。
一旦你得到了表達,你需要評估它是否符合給定行。可與另一個描述()調用來完成,特別是:
Describe ("Evaluate('<expression>', <rownum>)")
一個表達式被上可與GETROW()函數可以了評價的行號。
這可能聽起來像需要PowerScript和臨時值存儲,但只要您願意進行多次函數調用以便多次獲得給定值,就可以在表達式中執行此操作,例如(一個例子列b):
if (Describe ("Evaluate (~"" + Mid (Describe ("b.protect"),
Pos (Describe ("b.protect"), "~t")+1,
Len (Describe ("b.protect")) - Pos (Describe ("b.protect"), "~t") - 1)
+ "~", " + String (GetRow()) + ")")='1',
rgb(128, 128, 128),
rgb(255,255,255))
這看起來複雜,但如果你把MID()的表達在計算領域,所以你可以看到結果,你會看到,簡單地解析出的保護和表達將其放入上述的Describe(Evaluate())語法中。
我有把一個作弊到我的代碼進行簡單。我使用了我的Protect表達式中只有單引號的知識,並選擇將Evaluate()表達式字符串放在雙引號中。如果我試圖對任何列進行一般性操作,並且不能在我的Protect表達式中假設缺少雙引號,那麼我將使用全局函數來使用轉義引號替換Protect表達式中的任何雙引號(〜「),這我在你的代碼相信看起來像一個三重波浪和報價。再說,如果我不得不進行全局函數調用(注意,全局函數表達式調用可以有顯著的性能影響如果有很多行),我只是將它傳遞給Describe(「列」。保護「)和GETROW()和建立的PowerScript整個表達式,它會更容易理解和維護。
祝你好運,
特里。
謝謝*這麼*多的特里,這是對我來說非常有用:) – glasnt 2010-01-31 23:52:10