Отображение части одного листа на втором листе (с сохранением условного форматирования)

#google-apps-script #google-sheets #conditional-formatting

Вопрос:

У меня есть лист под названием [Календарь] с календарем на каждый месяц года, этот лист имеет условное форматирование для окрашивания каждой даты в зависимости от праздников/вместимости за этот месяц. Эти даты также указаны на листе [Календарь].

У меня есть второй лист за каждый месяц (например. [Январь 2022], на этом листе много информации о том, что происходит в этом месяце.

Я бы хотел, чтобы этот календарь месяцев из [Календаря] появился в [январе 2022 года] с сохранением всего условного форматирования. Возможно ли это?

(Я понимаю, что мог бы повторно выполнить все условное форматирование на ежемесячных листах на основе информации в [Календаре], используя Calendar!Range условия, но существует 45 различных наборов условного форматирования, а также сценарий, который изменяет цвет границ определенных ячеек, если они соответствуют другим условиям на листе. Мне было интересно, есть ли более простой способ)

Комментарии:

1. Вы можете скопировать формат с исходного листа в конечный. sourceRange.copyTo(targetRange, {formatOnly:true}) . Почти таким же образом вы можете копировать цвета фона. Но я не уверен насчет границ. Границы-это совсем другое дело. Их можно скопировать через API листа, но это гораздо более сложный вопрос.

2. Проблема в том, что я просто хотел бы скопировать 1 месяц (например, только январь 2022 года) из [Календаря], и это составило бы только одну часть листа [Январь 2022 года], остальное были бы списки дел, предстоящие события и т. Д. и т. Д. Я бы действительно хотел просто «показать» определенный диапазон с другого листа [Календарь!E7:K14], как он есть на другом листе, нет ли способа встроить часть другого листа?

3. Для «встраивания» части другого листа вы можете использовать стандартную функцию «ИМПОРТ» (). Но он «копирует» (на самом деле не копирует, а просто показывает) данные без форматирования. Это означает повторное использование форматирования целевого листа (диапазон назначения, часть целевого листа). Поэтому, если у вас более или менее постоянное форматирование (цвета, стили шрифтов), вы можете использовать IMPORTRANGE. Но если вы хотите изменить форматирование в источнике или в месте назначения, это может потребовать некоторых сценариев ручной коррекции каждый раз, когда вы меняете форматирование.

4. Когда вы говорите, что просто хотите, чтобы show он был в определенном диапазоне, вы имеете в виду, что любые изменения в исходном диапазоне должны быть обновлены в целевом диапазоне? Если это так, вы можете использовать комбинацию onEdit триггера и copyTo . Таким образом, каждый раз, когда в исходный диапазон вносятся изменения, данные диапазона (включая условное форматирование и границы) будут копироваться в диапазон назначения. Однако это будет работать только для правок пользователей. Не могли бы вы уточнить, было бы ли это желательным поведением? В таком случае я бы подумал о том, чтобы опубликовать ответ.

5. Да, это похоже на то, что мне нужно. Хотя лист [Календаря] (показывающий все ежемесячные календари на следующие пару лет), вероятно, будет обновляться только раз в месяц или около того, но страница за этот месяц [январь 2022 года] будет обновляться ежедневно. Мне, вероятно, не нужно было бы «обновлять» этот календарь месяцев при каждом изменении, внесенном в [январь 2022 года], но я бы хотел, чтобы он обновлялся каждый раз, когда в [Календаре] вносится изменение, если это возможно. Я постараюсь сделать примерный лист и связать его выше.

Ответ №1:

В настоящее время существует запрос на функцию для установки цвета и стиля границ диапазонов. Если вам нужна такая функция, вы можете перейти к этому вопросу и отметить запрос звездочкой.

36756953

Комментарии:

1. Цвет и стиль границы можно задать, см. раздел Настройка границы. Эта ошибка была отмечена как исправленная некоторое время назад issuetracker.google.com/issues/36756953#comment27 .

2. По-прежнему раздражает то, что вы не можете установить цвет границы с помощью условного форматирования.

Ответ №2:

Хорошо, после долгих раздумий я нашел несколько возможных решений, которые сработали.

Во-первых, вы можете скопировать/вставить область, которую вы хотели бы «показать», которая также скопирует форматирование, к сожалению, это форматирование больше не ссылается на правильную страницу (если, как в моем случае, вы также не копируете информацию, на которую полагаются условия).

Самый простой способ, который я нашел, состоял в том, чтобы скопировать поля, на которые полагаются условия, в те же поля на листе, на который вы копируете (например, в ячейку Jan!X10 поместите код =Calendar!X10 и сделайте то же самое для X10:Z20, например). Это означает, что при обновлении [Календарь] условное форматирование [Январь] изменяется, чтобы отразить это. [последний совет: после ввода кода в соответствующие ячейки вы можете либо скрыть эти ячейки, либо скопировать/вставить эти ячейки в то место, которое лучше работает на вашем листе, и ссылки в условном форматировании будут обновлены]

Другой способ, который я нашел для этого,-изменить условное форматирование [Jan] для ссылки на страницу [Календаря], к сожалению, вы не можете просто изменить =A1>X10 =A1>Calendar!X10 , вам нужно изменить его =A1>INDIRECT("'Calendar'!X10") , так как вы не можете напрямую использовать ссылку на перекрестный лист в условном форматировании (по какой-то причине).

Я надеюсь, что это поможет всем, у кого возникли те же проблемы, что и у меня. Счастливого кодирования 🙂