Google Sheets: условное форматирование на основе стиля другой ячейки - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь создать список выбора в Google Sheet на основе ячеек на другом листе. Эти ячейки содержат все значения, которые должен отображать мой список.

Это работает хорошо, но я также хочу получить стиль этих ячеек вместе со значениями. Таким образом, на моем основном листе, в зависимости от выбранного значения, стиль копируется из ячеек «источника».

Я знаю, что могу настроить условное форматирование, чтобы при значении X или Y или ZI можно было применить стиль но так как мои «исходные» ячейки будут обновлены, мне придется также обновить те условия, которые являются медленным процессом.

Мне интересно, есть ли способ просто динамически копировать стиль другого cell.

Вот пример моих исходных ячеек:

enter image description here

1 Ответ

1 голос
/ 28 апреля 2020

Используя Apps Script, вы можете создать onEdit триггер для выполнения следующих действий:

  • Отслеживание изменений в ячейках, которые содержат проверки данных на основе значений в диапазоне.
  • Если отредактированная ячейка содержит эту проверку данных, найдите значение в исходном диапазоне, соответствующее выбранному значению.
  • Скопируйте и вставьте формат ячейки в исходном диапазоне в выбранную ячейку. .

Для этого просто создайте связанный скрипт, выбрав Инструменты> Редактор скриптов , скопируйте следующий код и сохраните проект.

Пример кода ( проверить комментарии):

const onEdit = e => {
  // Get information on edited cell (column, row, value):
  const range = e.range;
  const column = range.getColumn();
  const row = range.getRow();
  const value = range.getValue();
  // Check that edited cell contains a validation rule and that its criteria type is "VALUE_IN_RANGE":
  const validation = range.getDataValidation();  
  if (validation && validation.getCriteriaType() == "VALUE_IN_RANGE") {
    const sourceRange = validation.getCriteriaValues()[0]; // Get range validation is based on
    // In source range, get index of the cell that corresponds to selected value in edited cell:
    const values = sourceRange.getValues();
    let i, j;
    for (i = 0; i < values.length; i++) {
      j = values[i].indexOf(value);
      if (j != -1) break;      
    }    
    const rangeToCopy = sourceRange.getSheet().getRange(sourceRange.getRow() + i, sourceRange.getColumn() + j); // Get cell in source range to copy format
    rangeToCopy.copyFormatToRange(range.getSheet(), column, column, row, row); // Copy format to edited cell
  }
}

enter image description here

Ссылка:

...