如何判断Google Apps for Google Spreadsheet中的两个单元格是否相同

时间:2014-07-21 14:59:32

标签: javascript google-apps-script google-sheets

我正在编写一个脚本来绑定两个单元格,以便在每次编辑后始终保持相同的值。到目前为止我的脚本看起来像这样:

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]

但是当我检查Logger日志时,我得到了

[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的值,值是相同的,因此它们必须引用相同的单元格,但是相等运算符不能检查它们是否是相同的范围。

1 个答案:

答案 0 :(得分:0)

  

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

标识运算符===在这种情况下不起作用的原因是所比较的是Range,而不是这些范围中单元格的内容。像桑迪建议的那样,你需要先得到这些值,然后对它们进行比较。

然而,不需要比较,是吗?您声明的目标是确保每次编辑后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.
}