简体   繁体   English

当特定单元格包含0时,以编程方式为行着色

[英]Programmatically colour row when specific cell contains 0

I am looking for a script that would turn a row green when the cell in column K contains 0 . 我正在寻找一个脚本,当K列中的单元格包含0时,该脚本将变为绿色行。

For example I would like B5 through L5 to turn green when K5 has a 0 . 例如,当K50时,我希望B5L5变为绿色。

Conditional formatting is not sufficient because I have some rows that do not need to be formatted now but they might in the future. 有条件的格式化是不够的,因为我有些行现在不需要格式化,但是将来可能会格式化。

Behold the insanity! 看错了! Had a bit of fun with this. 对此有一点乐趣。

Open your sheet and select the range you would like to make green then in the menu go Row Magic | 打开工作表并选择要设为绿色的范围,然后在菜单中进入“行魔术” |“魔术”。 Set Target. 设定目标。 You will be prompted to enter a name for that range. 系统将提示您输入该范围的名称。

Then go Row Magic | 然后去行魔术| Attach on the field you want to watch for Zero. 在您要注意零的字段上附加。 Enter the name of the range you want to update (the names of all the ranges are listed). 输入要更新的范围的名称(列出所有范围的名称)。 Now enter zero in the field and the range will change to a green background! 现在,在字段中输入零,范围将变为绿色背景! Theres a slight delay on my pc ~1 second. 我的电脑有轻微的延迟〜1秒。

This is my first app script so it most likely can be improved on a lot. 这是我的第一个应用程序脚本,因此很有可能可以进行很多改进。

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);
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM