Поскольку теперь я понимаю вопрос (также принял во внимание комментарии), необходимо выделить весь диапазон J1:P[n]
(я возьму, например, J1:P1000
), если какая-либо из ячеек в этом диапазоне содержит числовое содержимое. Это возможно с использованием формулы как ConditionalFormattingRule
.
Базовые знания:
Условное форматирование (CF) работает с правилами, применяемыми к диапазону ячеек, и с форматами, которые можно использовать, если правило выполняется. Во время выполнения процесса CF каждая ячейка в примененном диапазоне проверяется на соответствие правилу. Если да, то будет использоваться формат, если нет, то нет.
Итак, если правило является формулой, то мы должны смотреть на эту формулу с точки зрения каждой отдельной ячейки в диапазоне. Там это играет важную роль
являются ли ссылки на ячейки в формуле относительными или зафиксированы с использованием $
.
В ссылках на ячейку $
может фиксировать как ссылку на столбец, так и ссылку на строку. Например, в A1
и ссылка на столбец, и ссылка на строку являются относительными. В $A1
ссылка на столбец A
является фиксированной, а ссылка на строку относительной. В A$1
ссылка на столбец является относительной, а ссылка на строку 1
является фиксированной. В $A$1
фиксирована и ссылка на столбец A
, и ссылка на строку 1
. Так что эта последняя ссылка всегда будет ссылаться на ячейку A1
.
Конкретные примеры:
В моем ответе Apache POI - Условное форматирование - необходимо установить другой диапазон ячеек для правила и форматирования , что связано с этим ответом, правило формулы: AND(ISNUMBER($C1), $C1>5)
применяется к диапазону G1:L1000
. Таким образом, с точки зрения отдельной ячейки в G1:L1000
, правило проверяет следующее:
Является ли значение ячейки в столбце $C
(всегда в столбце C
, потому что эта ссылка зафиксирована), в той же строке, где существует одна ячейка (поскольку ссылки на строки относительны), числовое и больше 5?
В комментарии я предложил правило AND(ISNUMBER($C1), $C1>5, G1="")
, применяемое к тому же диапазону G1:L1000
. Это проверяет так же, как указано выше и:
Является ли одна ячейка в столбцах G:L
, где существует одна ячейка (не всегда в столбце G
, поскольку ссылка на столбец является относительной), в той же строке, где существует одна ячейка (поскольку ссылки на строки являются относительными) ), пусто (равно пустой строке)?
Теперь ваше фактическое требование:
"для выделения всего диапазона J1:P1000
, если какая-либо из ячеек в этом диапазоне содержит числовое содержимое"
Функция COUNT
рассчитывает только числа. Так что COUNT($J$1:$P$1000)
будет больше 0, если любая ячейка в J1:P1000
содержит число.
So
ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("(COUNT($J$1:$P$1000)>0)");
применяется к CellRangeAddress.valueOf("J1:P1000")
может работать как вы хотите.
С точки зрения одной ячейки для каждой ячейки COUNT
должен учитывать весь диапазон. Вот почему все ссылки в $J$1:$P$1000
фиксированы и не являются относительными.