Программный цвет строки, когда конкретная ячейка содержит 0 - PullRequest
0 голосов
/ 16 января 2019

Я ищу скрипт, который бы стал зеленым, если ячейка в столбце K содержит 0.

Например, я бы хотел, чтобы B5 - L5 стал зеленым, когда K5 имеет 0.

Условного форматирования недостаточно, потому что у меня есть строки, которые не нужно форматировать сейчас, но они могут появиться в будущем.

1 Ответ

0 голосов
/ 16 января 2019

Вот безумие! Было немного весело с этим.

Откройте свой лист и выберите диапазон, который вы хотите сделать зеленым, а затем в меню выберите Row Magic | Установить цель. Вам будет предложено ввести имя для этого диапазона.

Тогда иди Роу Мэджик | Прикрепите на поле, которое вы хотите смотреть на ноль. Введите название диапазона, который вы хотите обновить (перечислены все диапазоны). Теперь введите ноль в поле, и диапазон изменится на зеленый фон! Есть небольшая задержка на моем компьютере ~ 1 секунда.

Это мой первый скрипт приложения, поэтому его, скорее всего, можно улучшить.

function onOpen(e) {
  SpreadsheetApp.getUi()
  .createMenu('Row Magic')
  .addItem('Set Target', 'setTarget')
  .addItem('Attach', 'attachToRange')
  .addToUi();
}

function onEdit(e) {
  //var range = e.range;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  // Returns the active cell
  var cell = sheet.getActiveCell();
  var value = cell.getValue(); 
  var md = sheet.getDeveloperMetadata();

  md.forEach(function(m) {
    if (m.getKey().indexOf('rangeTarget_') === 0) {
      var keySplit = m.getKey().split('_');
      var row = keySplit[1];
      var column = keySplit[2];
      if (row == cell.getRow() && column == cell.getColumn()) {
        var rangeName = m.getValue();
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var ranges = ss.getNamedRanges();
        ranges[0].getName()
        ranges.forEach(function (r) { 
          if (r.getName() === rangeName) {
            if (value === 0) {
              r.getRange().setBackground('#00FF00');
            }
            else {
              r.getRange().setBackground('#FFFFFF');
            }
          }
        });
      }
    }
  });

}

function setTarget() {
  var ui = SpreadsheetApp.getUi();
  var response = ui.prompt('Enter name', ui.ButtonSet.OK_CANCEL);
  if (response.getSelectedButton() == ui.Button.OK) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var range = sheet.getActiveRange();
    ss.setNamedRange(response.getResponseText(), range)
  }  
}

function attachToRange() {
  var ui = SpreadsheetApp.getUi();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  // Returns the active cell
  var cell = sheet.getActiveCell();

  var namedRanges = ss.getNamedRanges();
  var rangeNames = [];
  namedRanges.forEach(function(r) {
    rangeNames.push(r.getName());
  });

  var response = ui.prompt('Enter range to target\n' + rangeNames.join('\n'), ui.ButtonSet.OK_CANCEL);
  if (response.getSelectedButton() === ui.Button.OK) {
    var r = response.getResponseText();
    if (rangeNames.indexOf(r) > -1) {
      var row = cell.getRow();
      var column = cell.getColumn();
      sheet.addDeveloperMetadata('rangeTarget_'+row+'_'+column, r);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...