わお。あなたは複雑で階層化された質問が好きです。
最初の問題は値へのアクセスですが、これは説明したほど直接は行われません。実際のところ、Describe()を使用して値を取得します。これに関する唯一の問題は、引用符が付いた次の形式の文字列として返されることです(〜tがタブである標準のPowerScript文字列表記を使用していることに注意してください)
"<DefaultValue>~t<Expression>"
式が必要なので、引用符も削除して解析する必要があります。
式を取得したら、指定された行について式を評価する必要があります。これは、別のDescribe()呼び出しで実行できます。特に、次のようになります。
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()式を計算フィールドに配置すると、Protect式を解析して、上記のDescribe(Evaluate())構文に配置するだけであることがわかります。
簡単にするために、コードに1つのチートを入れました。Protect式には一重引用符しかないという知識を使用し、Evaluate()式の文字列を二重引用符で囲むことにしました。これを任意の列に対して一般的に実行しようとしていて、Protect式に二重引用符がないことを想定できない場合は、グローバル関数を使用して、Protect式の二重引用符をエスケープされた引用符に置き換える必要があります。 (〜 ")、これはあなたのコードがトリプルチルダと引用符のように見えると私は信じています。グローバル関数呼び出しを行い(行が多い場合、式でのグローバル関数呼び出しはパフォーマンスに大きな影響を与える可能性があることに注意してください)、Describe( "column.protect")とGetRow()を渡して、 PowerScriptの式全体。これにより、理解と保守が容易になります。
幸運を、
テリー。