Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 当某个范围内的单元格发生更改时,需要运行触发器_Google Apps Script_Google Sheets_Triggers - Fatal编程技术网

Google apps script 当某个范围内的单元格发生更改时,需要运行触发器

Google apps script 当某个范围内的单元格发生更改时,需要运行触发器,google-apps-script,google-sheets,triggers,Google Apps Script,Google Sheets,Triggers,我有一个电子表格,用户可以用注释更新“J”列中的单元格,但是当他们更新该单元格时,我需要运行脚本。 然后,这将复制“I”列和“J”列中的所有信息,并将它们粘贴到另一个单元格中,然后将Vlookup公式放回“J”中,它刚刚从中获取信息 这听起来可能是一种复杂的处理事情的方式,但因为我有各种各样的表格从不同的工作簿中提取信息,所以我需要以这种方式进行 但是,我尝试了许多解决方案,当单元格发生更改时,无法使其运行。 我尝试过一个可安装的更改触发器,但它在整个工作簿上都有效,并且经常会删除它应该复制的信

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

这听起来可能是一种复杂的处理事情的方式,但因为我有各种各样的表格从不同的工作簿中提取信息,所以我需要以这种方式进行

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

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

函数更改(e)
{
var editRange={//J:J
排名:2,
底图:2000年,
左:10,,
右:10
};
//如果超出范围,请退出
var thisRow=e.range.getRow();
if(thisRoweditRange.bottom)返回;
var thisCol=e.range.getColumn();
如果(thisColeditRange.right)返回;
//要复制的数据存储在哪里
var ss=SpreadsheetApp.openById(“1ZQLKnCHD9acTXCKpTeOnJshHEz43FDPdKZ-U6Me-k”)
var West=ss.getSheetByName(“西部订单”)
var WestNotes=ss.getSheetByName(“WestNotes”)
//要复制的数据的范围
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).setValue(CopyWestNotes);
//输入公式以更新注释;
var公式='=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false),“”)
var WestFormula=West.getRange(2,10,West.getLastRow(),1).setValue(公式)
}
onEdit事件 更改触发器不是简单的触发器。你必须自己安装。这里面也没有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);
}
函数onEdit(e){
var editRange={top:2,bottom:2000,left:10,right:10};
var thisRow=e.range.rowStart;
如果(thisRoweditRange.bottom)返回;
var thisCol=e.range.columnStart;
if(thisColeditRange.right)返回;
var ss=电子表格应用程序openById(“id”);
var West=ss.getSheetByName(“西部订单”);
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).setValue(CopyWestNotes);
var公式='=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false),“”);
var WestFormula=West.getRange(2,10,West.getLastRow(),1).setValue(公式);
}
我应该提到,您需要在第7行中添加id。

onEdit事件 更改触发器不是简单的触发器。你必须自己安装。这里面也没有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);
}
函数onEdit(e){
var editRange={top:2,bottom:2000,left:10,right:10};
var thisRow=e.range.rowStart;
如果(thisRoweditRange.bottom)返回;
var thisCol=e.range.columnStart;
if(thisColeditRange.right)返回;
var ss=电子表格应用程序openById(“id”);
var West=ss.getSheetByName(“西部订单”);
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).setValue(CopyWestNotes);
var公式='=IFerror(VLOOKUP(i2,\'West Notes\'!A:B,2,false),“”);
var WestFormula=West.getRange(2,10,West.getLastRow(),1).setValue(公式);
}

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

对脚本第7行的简单更改消除了问题,而不是使用.openById,我使用了.getActiveSpreadsheet

对脚本第7行的简单更改消除了问题,而不是使用.openById,我使用了.getActiveSpreadsheet

感谢您的回复,我已经运行了您为我编写的ammended代码,但是在编辑单元格后检查执行日志时,我仍然收到以下消息“执行失败:类型错误:无法从未定义的位置读取属性“rowStart”。(第3行,文件“code”)”您是否使用了我的代码的精确副本,包括
onEdit(e)
;是的,完全相同,但我可能应该包括我想要查看的工作表以及编辑/更改发生的范围。嗯,不知为什么,事件对象没有被填充。你要么自己调试,要么共享一个显示问题的电子表格,这样我就可以解决问题。如果您使用的是可安装的触发器,那么希望您选择的是onEdit()触发器,而不是onChange()触发器。事实上,如果这是问题所在,我将看不到它们,因为我看不到您的项目触发器。对脚本第7行的简单更改消除了问题,而不是使用.openById,我使用.getActiveSpreadsheet感谢您的回复,我已经运行了您为我编写的ammended代码,