【问题标题】:Google Script for Conditional Formatting w/ multiple ranges and more than one condition具有多个范围和多个条件的用于条件格式的 Google 脚本
【发布时间】:2020-06-27 21:20:16
【问题描述】:

Sample of the page I am using
我在工作表中使用条件格式,但想将其更改为 Google 脚本。

对于每个没有 Y 的退房日期,突出显示黄色。

我设法修改了一个脚本,以根据 A:D 的两个条件突出显示一个单元格,但无法弄清楚如何将其扩展到工作表中的其他范围。

这是我目前发现的:

function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("A:D");
var values = range.getValues();

//for each row that data is present
for(var i = 0; i < values.length; i++) {
var cell = sheet.getRange(i + 1, 4);

  if(values[i][1] !== "") {


  if(values[i][3] === "") {
    cell.setBackground('yellow');
  } else {
    cell.setBackground(null);
  }

 } else {

  cell.setBackground(null);
}
}  
}    

链接:Google App Script - Conditional Formatting Based on Another Cell

【问题讨论】:

  • 1.分享样本表以获得更好的答案。 2.什么是开始和最终结果,有截图吗?请帮我帮你。

标签: google-apps-script google-sheets gs-conditional-formatting triggers


【解决方案1】:

试试这个:

function onEdit(e) {
  //e.source.toast('Entry');
  var sh=e.range.getSheet();
  if(sh.getName()=="Sheet2") {
    //e.source.toast('Conditional');
    var vs=sh.getRange(1,1,sh.getLastRow(),4).getValues();
    vs.forEach(function(r,i){
      let rg=sh.getRange(i+1,4);
      if(r[1]=="") {
        if(r[3]=="") {
          //e.source.toast('yellow');
          rg.setBackground('#ffff00');
        }else{
          //e.source.toast('white');
          rg.setBackground('#ffffff');
        }
      }else{
        //e.source.toast('r[1] not null');
        rg.setBackground('#ffffff');
      }
    });
  }
}    

我对此进行了一些测试,它似乎可以工作

function onEdit(e) {
  //e.source.toast('Entry');
  var sh=e.range.getSheet();
  if(sh.getName()=="Sheet2") {
    //e.source.toast('Conditional');
    var v=sh.getRange(6,1,sh.getLastRow()-5,sh.getLastColumn()).getValues();
    var r0=sh.getRange(6,4,sh.getLastRow()-5,1);
    var c0=r0.getBackgrounds();
    var r1=sh.getRange(6,9,sh.getLastRow()-5,1);
    var c1=r1.getBackgrounds();
    var r2=sh.getRange(6,14,sh.getLastRow()-5,1);
    var c2=r2.getBackgrounds();
    var r3=sh.getRange(6,19,sh.getLastRow()-5,1);
    var c3=r3.getBackgrounds();
    var r4=sh.getRange(6,24,sh.getLastRow()-5,1);
    var c4=r4.getBackgrounds();
    v.forEach(function(r,i){
      c0[i][0]=(r[1]=="" && r[3]=="")?'#ffff00':'#ffffff';
      c1[i][0]=(r[6]=="" && r[8]=="")?'#ffff00':'#ffffff';
      c2[i][0]=(r[11]=="" && r[13]=="")?'#ffff00':'#ffffff';
      c3[i][0]=(r[16]=="" && r[18]=="")?'#ffff00':'#ffffff';
      c4[i][0]=(r[21]=="" && r[23]=="")?'#ffff00':'#ffffff';
    });
    r0.setBackgrounds(c0);
    r1.setBackgrounds(c1);
    r2.setBackgrounds(c2);
    r3.setBackgrounds(c3);
    r4.setBackgrounds(c4);
  }
}    

对整个电子表格试试这个:

function onEdit(e) {
  //e.source.toast('Entry');
  var sh=e.range.getSheet();
  //e.source.toast('Conditional');
  var v=sh.getRange(6,1,sh.getLastRow()-5,sh.getLastColumn()).getValues();
  var r0=sh.getRange(6,4,sh.getLastRow()-5,1);
  var c0=r0.getBackgrounds();
  var r1=sh.getRange(6,9,sh.getLastRow()-5,1);
  var c1=r1.getBackgrounds();
  var r2=sh.getRange(6,14,sh.getLastRow()-5,1);
  var c2=r2.getBackgrounds();
  var r3=sh.getRange(6,19,sh.getLastRow()-5,1);
  var c3=r3.getBackgrounds();
  var r4=sh.getRange(6,24,sh.getLastRow()-5,1);
  var c4=r4.getBackgrounds();
  v.forEach(function(r,i){
    c0[i][0]=(r[1]=="" && r[3]=="")?'#ffff00':'#ffffff';
    c1[i][0]=(r[6]=="" && r[8]=="")?'#ffff00':'#ffffff';
    c2[i][0]=(r[11]=="" && r[13]=="")?'#ffff00':'#ffffff';
    c3[i][0]=(r[16]=="" && r[18]=="")?'#ffff00':'#ffffff';
    c4[i][0]=(r[21]=="" && r[23]=="")?'#ffff00':'#ffffff';
  });
  r0.setBackgrounds(c0);
  r1.setBackgrounds(c1);
  r2.setBackgrounds(c2);
  r3.setBackgrounds(c3);
  r4.setBackgrounds(c4);
}    

请记住,如果您有多个人在编辑工作表,那么您将丢失一些编辑,因为脚本将无法跟上。

【讨论】:

  • 运行它时它给了我以下代码:TypeError: Cannot read property 'range' of undefined (line 3, file "Code")
  • 您不能从脚本编辑器运行它。它需要 onedit 触发事件块。
  • 谢谢。我很抱歉,我在我的帖子中没有更清楚。我重新编辑了它以解释我在整个页面中需要的参数,并包含了我的页面的快照。
  • 额外的范围是什么?
  • 我贴了一张图片,以防您需要视觉效果。如果 G 不是空白并且 I 是空白然后突出显示,如果 L 不是空白并且 N 是空白然后突出显示,如果 Q 不是空白并且 S 是空白,然后突出显示,最后,如果 V 不是空白并且 X 是空白然后突出显示。希望有帮助!
猜你喜欢
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
相关资源
最近更新 更多