繁体   English   中英

如何判断Google Spreadsheet的Google Apps脚本中两个单元格是否相等

[英]How to tell if two cells are equal in Google Apps Script for Google Spreadsheet

我正在编写一个脚本来绑定两个单元格,以使其每次编辑后始终保持相同的值。 到目前为止,我的脚本如下所示:

function myEdit(event){
  var ss = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  var bind1 = ss.getRange("D11:D11").getCell(1,1);
  var bind2 = ss.getRange("D10:D10").getCell(1,1);
  var editedCell = r.getCell(1,1);

  Logger.log("checking");
  if (editedCell === bind1){
    Logger.log("Condition was Met!");
    bind1.copyTo(bind2);
  }
  else if (editedCell === bind2){
    Logger.log("Condition was met!");
    bind2.copyTo(bind1);
  }
  else{
    Logger.log("No condition was met.");
  }

当我更改两个绑定的单元格中的值时,不会在其他任何位置复制任何内容。 当我检查执行日志时,似乎一切正常

[14-07-21 10:47:06:215 EDT] Execution succeeded [0.884 seconds total runtime]

但是当我检查记录仪日志时,我得到

[14-07-21 10:55:49:260 EDT] checking
[14-07-21 10:55:49:260 EDT] No condition was met.

由于某种原因,当我编辑单元格D11时,程序无法识别editedCell和bind1是同一对象。

通过检查bind1和editedCell的值,它们是相同的,因此它们必须引用同一单元格,但是相等运算符无法检查它们是否在相同范围内。

由于某种原因,当我编辑单元格D11时,程序无法识别editedCell和bind1是同一对象。

身份运算符===在这种情况下不起作用的原因是,要比较的是范围,而不是那些范围中单元格的内容。 就像桑迪建议的那样,您需要首先获取值,然后进行比较。

但是,不需要比较,是吗? 您声明的目标是确保每次编辑后D10和D11包含相同的值。 由于唯一会影响任何一个的编辑都是对自身的更改,因此可以忽略对除D10或D11以外的任何单元格所做的任何编辑。 此外,如果它们中的任何一个发生了更改,并且调用了myEdit() ,您就会知道它们是不同的,因此您可以将新更改的值复制到另一个单元格中。

像这样:

function myEdit(event){
  // To check whether we need to do anything, find which cell was edited.
  // Get the A1 notation for the changed cell.
  var cellA1 = event.range.getA1Notation();

  if (cellA1 == "D10") {
    // D10 changed, so copy value to D11
    event.range.offset(1,0).setValue(event.value);
  }
  else if (CellA1 == "D11") {
    // D11 changed, so copy value to D10
    event.range.offset(-1,0).setValue(event.value);
  }
  // Any other cell, do nothing.
}

暂无
暂无

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

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