Условное форматирование таблицы Google script

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

Я хочу, чтобы ячейка A2 изменилась на зеленый, если ячейка O2 имеет значение "X", и это будет выполняться в обоих столбцах до конца. Я знаю, что для этого потребуется script.

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

Ссылка: https://webapps.stackexchange.com/info/16745/google-spreadsheets-conditional-formatting

Ответ 1

Здесь script вы можете использовать, чтобы описать:

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  var columnO = sheet.getRange(2, 15, sheet.getLastRow()-1, 1);
  var oValues = columnO.getValues();

  for (var i = 0; i < oValues.length; i++) {
    if (oValues[i][0] == 'X') {
      sheet.getRange(i + 2, 1, 1, 1).setBackgroundColor('green');
    }
  }
}

Ответ 2

В новых листах Google это больше не требует script.

Вместо этого в условном форматировании выберите опцию "настраиваемая формула" и введите значение, подобное =O2="X" - или действительно любое выражение, которое возвращает логическое значение true/false.

Из того, что я могу сказать, ссылки, перечисленные в этих настраиваемых сценариях, немного странны и применяются следующим образом...

Если это ячейка в пределах выбранного вами диапазона, то она изменяется на "ячейку, которая подсвечивается".

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

То есть, если ваш диапазон был A1:B2, то приведенное выше будет таким же, как установка индивидуального форматирования в каждой ячейке следующим образом:

A1 =O2="X"
A2 =O3="X"
B1 =P2="X"
B2 =P3="X"

Вы также можете указать фиксированные ссылки, например =$O$2="X" -, которые будут проверять конкретную ячейку O2 для всех ячеек в выбранном диапазоне.

Ответ 3

(Февраль 2017 г.) Как уже упоминалось в другом ответе, Google Sheets теперь позволяет пользователям добавлять условное форматирование непосредственно из пользовательского интерфейса, будь то на настольном компьютере/ноутбуке, устройствах Android или iOS.

Аналогичным образом, с помощью Google Sheets API v4 (и новее) разработчики теперь могут создавать приложения с правилами условного форматирования CRUD. Посетите руководство и образцы страниц для получения более подробной информации, а также справочные документы (поиск {add,update,delete}ConditionalFormatRule). В этом руководстве приведен фрагмент кода Python (в качестве конечной точки службы API указан идентификатор файла SHEET_ID и SHEETS):

myRange = {
    'sheetId': 0,
    'startRowIndex': 1,
    'endRowIndex': 11,
    'startColumnIndex': 0,
    'endColumnIndex': 4,
}

reqs = [
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {'textFormat': {'foregroundColor': {'red': 0.8}}}
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=GT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
    {'addConditionalFormatRule': {
        'index': 0,
        'rule': {
            'ranges': [ myRange ],
            'booleanRule': {
                'format': {
                    'backgroundColor': {'red': 1, 'green': 0.4, 'blue': 0.4}
                },
                'condition': {
                    'type': 'CUSTOM_FORMULA',
                    'values':
                        [{'userEnteredValue': '=LT($D2,median($D$2:$D$11))'}]
                },
            },
        },
    }},
]

SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID,
        body={'requests': reqs}).execute()

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

Conditional formatting example


ОБЪЯВЛЕНИЕ ОБЩЕСТВЕННОЙ СЛУЖБЫ

Последний API Sheets предоставляет функции, недоступные в более ранних версиях, а именно предоставляет разработчикам программный доступ к Sheet, как если бы вы использовали пользовательский интерфейс (условное форматирование [!], Фиксированные строки, форматирование ячеек, изменение размеров строк/столбцов, добавление сводных таблиц, создание диаграмм и т.д.).

Если вы новичок в API & Хочу увидеть чуть более длинные, более общие "реальные" примеры использования API, я создал различные видео и похожие посты в блоге:

Как вы можете заметить, API Sheets в первую очередь предназначен для функциональности документа -oriented, как описано выше, но для выполнения доступа к файлу -level, например для выгрузки и загрузки; загрузки, импорт и экспортировать (аналогично загрузке и загрузке, но конвертировать в/из различных форматов), вместо этого используйте Google Drive API. Примеры использования Drive API:

  • Экспорт листа Google в формате CSV (только для блога)
  • Конвертер "Простой человек в PDF" (пост в блоге только) (*)

(*) - TL; DR: загрузить простой текстовый файл на диск, импортировать/преобразовать в формат Google Docs, а затем экспортировать этот документ в PDF. Пост выше использует Drive API v2; В этом последующем посте описывается его миграция на Drive API v3, а здесь видео, объединяющее оба поста "Бедный конвертер".

Ответ 4

С помощью новейшего Sheet API вы можете программно добавить правило условного форматирования на лист, чтобы сделать выделение.

Вы можете добавить правило настраиваемой формулы, которое установит зеленый цвет фона в столбце A, где столбец O - "X", например:

function applyConditionalFormatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');

  var numRows = sheet.getLastRow();
  var rangeToHighlight = sheet.getRange("A2:A" + numRows);
  var rule = SpreadsheetApp.newConditionalFormatRule()
      .whenFormulaSatisfied('=INDIRECT("R[0]C[14]", FALSE)="X"')
      .setBackground("green")
      .setRanges([rangeToHighlight])
      .build();

  var rules = sheet.getConditionalFormatRules();
  rules.push(rule);
  sheet.setConditionalFormatRules(rules);
}

Диапазон, к которому применяется условное форматирование, - это столбец A от строки 2 до последней строки на листе.

Пользовательская формула:

=INDIRECT("R[0]C[14]", FALSE)="X"

что означает переход на 14 столбцов справа от выбранного столбца диапазона и проверку его значения "X".

Столбец O - это 14 столбцов справа от столбца A.