当某个范围内的单元格发生变化时,需要触发才能运行

时间:2019-04-14 15:45:17

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

我有一个电子表格,用户可以在其中使用注释更新“ J”列中的单元格,但是当他们更新该单元格时,我需要运行我的脚本。 然后,它将复制“ I”和“ J”列中的所有信息,并将它们粘贴到另一个单元格中,然后将Vlookup公式放回刚刚从中获取信息的“ J”中。

听起来似乎很复杂,但是由于我有各种各样的工作表从不同的工作簿中提取信息,因此我需要以这种方式进行。

但是,我尝试了许多解决方案,并且在更换单元格后无法使其运行。
我已经尝试过在变更触发器上安装一个可安装程序,但这在整个工作簿上都有效,并且通常最终会删除它应该复制的信息。

我在下面粘贴了我正在使用的代码,任何帮助将不胜感激。

function onChange(e) 
{
  var editRange = { // J:J
    top : 2,
    bottom : 2000,
    left : 10,
    right : 10
  };

  // Exit if we're out of range
  var thisRow = e.range.getRow();
  if (thisRow < editRange.top || thisRow > editRange.bottom) return;

  var thisCol = e.range.getColumn();
  if (thisCol < editRange.left || thisCol > editRange.right) return;

  //Where Is The Data Stored That You Want To Copy
  var ss = SpreadsheetApp.openById("1ZQLKnCHD9acTXCKpTeOnJshHEz43FDPdKZ-U6Me-k_k")
  var West = ss.getSheetByName("West Orders")
  var WestNotes = ss.getSheetByName("West Notes")

  //Ranges of The Data You Want To Copy
  var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues()

    //Clear The Data Before Overiding
  var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear()

  //Ranges Of The Data You Want To Store
  var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);

  //Put a formula in to update Notes;
  var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")'
  var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula)
  }

2 个答案:

答案 0 :(得分:2)

onEdit事件

更改触发器不是简单的触发器。您必须自己安装它。 event object中也没有e.range。我想如果您检查过执行情况,就会看到一些错误。

我将您的代码修改为一个onEdit()简单触发器。但是,如果您执行任何需要权限的操作,则可能必须使其可安装。看起来像你。因此,现在您应该能够继续调试代码。

function onEdit(e) {
  var editRange = {top:2,bottom:2000,left:10,right:10};
  var thisRow=e.range.rowStart;
  if (thisRow<editRange.top || thisRow>editRange.bottom)return;
  var thisCol=e.range.columnStart;
  if (thisCol<editRange.left || thisCol>editRange.right)return;
  var ss = SpreadsheetApp.openById("id");
  var West = ss.getSheetByName("West Orders");
  var WestNotes = ss.getSheetByName("West Notes");
  var CopyWestNotes = West.getRange(2, 9,West.getLastRow(),2).getValues();
  var ClearNotes = WestNotes.getRange(2,1,WestNotes.getLastRow(),2).clear();
  var PasteWestId = WestNotes.getRange(2,1,West.getLastRow(),2).setValues(CopyWestNotes);
  var formula = '=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false)," ")';
  var WestFormula = West.getRange(2,10,West.getLastRow(),1).setValue(formula);
}

我应该提到您需要在第7行中添加ID。

答案 1 :(得分:0)

只需对脚本的第7行进行简单更改就可以消除该问题,我使用了.getActiveSpreadsheet而不是使用.openById