Google apps script 仅适用于指定单元格范围的OneEdit触发器

Google apps script 仅适用于指定单元格范围的OneEdit触发器,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我已经编写了一个脚本,将一系列单元格从一个工作表复制到一个新的工作表,用于跟踪工作,虽然只使用onedit的触发器,但效果良好。我想修改脚本,使其仅在编辑指定范围的单元格时更新跟踪表。我相信这可以用onEdite来完成,但我至今还没有弄明白 var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet var ts = SpreadsheetApp.openByUrl('https://docs.googl

我已经编写了一个脚本,将一系列单元格从一个工作表复制到一个新的工作表,用于跟踪工作,虽然只使用onedit的触发器,但效果良好。我想修改脚本,使其仅在编辑指定范围的单元格时更新跟踪表。我相信这可以用onEdite来完成,但我至今还没有弄明白




  var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet

  var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking

  var sourceSheet = ss.getSheetByName("Report Template");//source sheet

  var targetSheet = ts.getSheetByName("Tracker");//target sheet

  var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet



  var valuesLength = values.length;

  if (!valuesLength) return;



  var lastRow = targetSheet.getLastRow();

  var requiredRows = lastRow + valuesLength - targetSheet.getMaxRows();

  if (requiredRows > 0) targetSheet.insertRowsAfter(lastRow, requiredRows);



  values[0].push(new Date()); //Add Date to the 2D array.

  targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);





}```

您需要一个if语句来计算正在编辑的单元格 要访问已编辑的单元格,可以使用范围,该范围将返回已编辑的单元格 样本: 更新: 您还有其他一些小错误,例如requiredRows定义

完整的代码如下所示,您应该通过实际希望查看的单元格替换单元格A1和A2:

function onEdit(event){
  var cellName = event.range.getA1Notation();
  if(cellName == "A1" || cellName == "A2"){
    var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet
    var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking
    var sourceSheet = ss.getSheetByName("Report Template");//source sheet
    var targetSheet = ts.getSheetByName("Tracker");//target sheet
    var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet
    var valuesLength = values.length;    
    if (!valuesLength) return;
    var lastRow = targetSheet.getLastRow();
    var requiredRows = valuesLength;
    values[0].push(new Date()); //Add Date to the 2D array.
    targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);
  }
}
重要:


要使用需要授权的服务,如SpreadsheetApp.openByUrl,您需要通过一个触发器替换OneEdit触发器。

我已经尝试了一整天,但我似乎无法找到它,我所做的所有更改总是失败,我按照您的建议添加了我的原始代码,同时将cellName更新到我感兴趣的单元格中,但没有成功。我的错误您没有调用SpreadsheetApp.openByUrl的权限。所需权限:at onEditCode:5OAuth需要修改,因此我执行了此Appsscript.json清单{oauthScopes:[https://www.googleapis.com/auth/spreadsheets ],时区:America/Los_Angeles,依赖项:{},例外记录:STACKDRIVER}在代码运行onEdit之前,即使出现错误,也需要手动运行一次。这将触发授权流,并在您授予权限的情况下为脚本分配必要的作用域。我确实这样做了,但仍然失败,在执行时出现相同的错误。为了进一步测试,我创建了一个新的工作表,并将脚本复制到其中,运行了一次,授予了权限,然后进行了检查,执行仍然存在相同的问题。你还有其他建议吗?
function onEdit(event){
  var cellName = event.range.getA1Notation();
  if(cellName == "A1" || cellName == "A2"){
    var ss = SpreadsheetApp.getActiveSpreadsheet();//source spreadsheet
    var ts = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/MYSHEET');//target spreadsheet for tracking
    var sourceSheet = ss.getSheetByName("Report Template");//source sheet
    var targetSheet = ts.getSheetByName("Tracker");//target sheet
    var values = sourceSheet.getRange("H7:I7").getValues();//source sheet cell range to copy to target sheet
    var valuesLength = values.length;    
    if (!valuesLength) return;
    var lastRow = targetSheet.getLastRow();
    var requiredRows = valuesLength;
    values[0].push(new Date()); //Add Date to the 2D array.
    targetSheet.getRange(lastRow + 1, 1, valuesLength, values[0].length).setValues(values);
  }
}