Предполагая, что между выделенными областями нет перекрытия, а также если между числом и косой чертой есть пробел, вы можете использовать CF на основе следующего правила:
=AND(ISNUMBER(MATCH("task",$A1:A1,1)),LEFT(INDEX($A1:A1,,MATCH("task",$A1:A1,1)),FIND(" ",INDEX($A1:A1,,MATCH("task",$A1:A1,1))))+MATCH("task",$A1:A1,1)-COLUMN()>=1,COLUMN()>=MATCH("task",$A1:A1,1))
Более подробно, есть external AND
с 3 условиями:
ISNUMBER(MATCH("task",$A1:A1,1)
: проверяет динамический диапазон $A1:A1
для ячейки, содержащей # / task
. s> Редактировать - не требуется при условном форматировании. B1
содержит 2 / task
. LEFT(INDEX($A1:A1,,MATCH("task",$A1:A1,1)),FIND(" ",INDEX($A1:A1,,MATCH("task",$A1:A1,1))))
: находит ячейку # / task
в B1
и извлекает текст слева от первого пробела, возвращая 2
. +MATCH("task",$A1:A1,1)
: добавляет номер столбца ячейки с # / task
, т.е. + 2 = 4
. -COLUMN()
: вычитает текущий столбец, о котором идет речь. Так для клетки B1
, 4 - 2 = 2
; C1
, 4 - 3 = 1
; и D1
, 4 - 4 = 0
и т. д. >=1
: если результат предыдущего шага больше 1, ячейка должна быть выделена. Таким образом, B1
и C1
выделены, а D1
нет. COLUMN()>=MATCH("task",$A1:A1,1)
: гарантирует, что выделение только расширяется вправо. Если бы это условие было исключено, A1
также будет выделено. РЕДАКТИРОВАТЬ:
Предполагая, что у вас будут разные правила для разных «задач» и вам нужно сопоставить конкретный текст «задача», попробуйте следующее:
=AND(LEFT(INDEX($A1:A1,,AGGREGATE(14,6,COLUMN($A1:A1)/ISNUMBER(SEARCH("task",$A1:A1)),1)),FIND(" ",INDEX($A1:A1,,AGGREGATE(14,6,COLUMN($A1:A1)/ISNUMBER(SEARCH("task",$A1:A1)),1))))+AGGREGATE(14,6,COLUMN($A1:A1)/ISNUMBER(SEARCH("task",$A1:A1)),1)-COLUMN()>=1,COLUMN()>=AGGREGATE(14,6,COLUMN($A1:A1)/ISNUMBER(SEARCH("task",$A1:A1)),1))
Другой взгляд:
Необходимо сделать это в миграции одной из таблиц, или в отдельной миграции, если те миграции были, работал:
create_table :articles_tags, :id => false do |t|
t.references :article, :tag
end
add_index :articles_tags, [:article_id, :tag_id]
Это составит таблицу для Вас, и эти :id => false
говорит направляющим не добавлять идентификационное поле к этой таблице. Также существует индекс, который ускорит поиски для этой объединяющей таблицы.
Вы могли также генерировать модель (ArticlesTag) для этого и сделать:
# article.rb
has_many :articles_tags
has_many :tags, :through => :articles_tags
# tag.rb
has_many :articles_tags
has_many :articles, :through => :articles_tags
# article_tag.rb
belongs_to :tag
belongs_to :article
И затем составляют таблицу в миграции, сгенерированной от эти script/generate model articles_tag
вызов.
Вы, вероятно, также хотите добавить индекс к миграции:
add_index "articles_tags", "article_id"
add_index "articles_tags", "tag_id"
Однако, если бы Вы хотите отметить функциональность, я рекомендовал бы acts_as_taggable_on плагин направляющих:
http://www.intridea.com/tag/acts_as_taggable_on http://github.com/mbleigh/acts-as-taggable-on/
я использовал его на проекте, и было очень легко реализовать.
Одна из проблем с объединяющей таблицей для меток - то, что это может легко получить ужасное создание объединяющей таблицы для каждого типа контента, который Вы хотите сделать taggable (т.е. comments_tags, posts_tags, images_tags, и т.д.). Этот плагин использует таблицу маркировок, которая включает различитель для определения типа контента без потребности определенной объединяющей таблицы для каждого типа.