簡體   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