Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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 - Fatal编程技术网

Google apps script 如何从多个电子表格中检测编辑

Google apps script 如何从多个电子表格中检测编辑,google-apps-script,Google Apps Script,我有以下功能,用于在对特定电子表格进行编辑时,将更改记录到更改日志中 与监视单个电子表格的更改不同,我希望监视多个电子表格(作为数组)的更改。如何修改代码为多个电子表格创建触发器 var model1Id='xxx'; var changelogId='yyy'; //创建OneEdit触发器。 函数createOnEditTrigger(){ ScriptApp.newTrigger('catchEdits')) .适用于前页(型号1ID) .onEdit() .create(); } //

我有以下功能,用于在对特定电子表格进行编辑时,将更改记录到更改日志中

与监视单个电子表格的更改不同,我希望监视多个电子表格(作为数组)的更改。如何修改代码为多个电子表格创建触发器

var model1Id='xxx';
var changelogId='yyy';
//创建OneEdit触发器。
函数createOnEditTrigger(){
ScriptApp.newTrigger('catchEdits'))
.适用于前页(型号1ID)
.onEdit()
.create();
}
//从onEdit事件获取值,并将此数据推送到changelog电子表格
功能编辑(e){
var spreadId=e.source.getId();
var spreadName=e.SpreadsheetApp.getActiveSpreadsheet().getName();
var sheet=e.source.getActiveSheet();
var sheetName=sheet.getName();
var cellAddress=e.range.geta1表示法();
var oldValue=e.oldValue;
var值=e.value;
var user=e.user;
变量日期=新日期();
appendRow([spreadId,spreadName,sheetName,cellAddress,oldValue,value,user,date]);
}
问题: 如何修改代码为多个电子表格创建触发器

答复: 若您有一个数组,其中包含要监视的不同电子表格的
id
,那个么您可以循环遍历该数组,并为每个对应的电子表格创建一个触发器

代码示例: 注:
  • 请注意,每个脚本中每个用户最多有20个触发器,因此您不能使用单个脚本跟踪超过20个电子表格(请参阅)
  • e
    没有属性
    SpreadsheetApp
    ,并且
    e.source
    引用当前电子表格,因此我建议您更改
    var spreadsheetname=e.SpreadsheetApp.getActiveSpreadsheet().getName()
    to
    var spreadName=e.source.getName()(请参阅)

OneEdit只能为一张工作表触发,但您应该能够将此脚本复制到所有源电子表格(保留相同的changeLog电子表格),并且它们都将写入其中。该脚本目前位于独立工作表中,而不是源电子表格中
function createOnEditTrigger(){
  const spreadsheetIds = ["spreadsheetId_1", "spreadsheetId_2", ...];
  spreadsheetIds.forEach(spreadsheetId => {
    const spreadsheet = SpreadsheetApp.openById(spreadsheetId);
    ScriptApp.newTrigger('catchEdits')
      .forSpreadsheet(spreadsheet)
      .onEdit()
      .create();
  });
}