Ничего себе. Вам нравятся сложные, многоуровневые вопросы.
Первая проблема - это доступ к значению, которое не выполняется так, как вы описали. Фактически, вы используете Describe () для получения значения. Единственная проблема заключается в том, что он возвращается в виде строки в следующем формате с кавычками (обратите внимание, что мы используем стандартную запись строки PowerScript, где ~ t - это вкладка)
"<DefaultValue>~t<Expression>"
Вы хотите выражение, поэтому вам придется разобрать его, отбросив также кавычки.
Как только вы получите выражение, вам нужно будет оценить его для данной строки. Это можно сделать с помощью другого вызова Describe (), в частности:
Describe ("Evaluate('<expression>', <rownum>)")
Номер строки, по которой вычисляется выражение, можно получить с помощью функции GetRow ().
Это может звучать так, как будто он нуждается в PowerScript и некотором временном хранилище значений, но если вы готовы выполнять избыточные вызовы функций для получения заданного значения более одного раза, вы можете сделать это в выражении, что-то вроде (для пример столбца б):
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 ()) описано выше.
У меня есть для простоты один код в мой код. Я использовал знания о том, что в выражении Protect у меня были только одинарные кавычки, и решил поместить строку выражения Evaluate () в двойные кавычки. Если бы я пытался сделать это в общем случае для любого столбца и не мог предположить отсутствие двойных кавычек в моем выражении Protect, я бы использовал глобальную функцию для замены любых двойных кавычек в выражении Protect на экранированные кавычки (~ "), который , я полагаю, в вашем коде будет выглядеть как тройная тильда и кавычка. Опять же, если бы мне пришлось сделать глобальный вызов функции (обратите внимание, что глобальная функция вызовы в выражениях могут оказать существенное влияние на производительность, если строк много), я просто передал бы им Describe ("column.protect") и GetRow () и построил бы все выражение в PowerScript, что было бы проще понимать и поддерживать.
Удачи,
Терри.