Google apps script 多个onEdit脚本,但第2行出现错误

Google apps script 多个onEdit脚本,但第2行出现错误,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我不知道我做错了什么。我在这方面还是新手,所以有很多地方会犯错。我正在尝试运行同一脚本的两个版本。当复选框被选中时,如果它在F列中,我希望函数7R运行,但是如果复选框在K列中,我希望函数8R运行。我使用带有类似问题的线程尝试合并这两个脚本,但在第2行中不断出现错误 我所得到的错误不见了;在语句之前:第2行 以下是我所拥有的: function onEdit(e) { 8R(); 7R(); } function 8R() { //Get the sheet you want to work w

我不知道我做错了什么。我在这方面还是新手,所以有很多地方会犯错。我正在尝试运行同一脚本的两个版本。当复选框被选中时,如果它在F列中,我希望函数7R运行,但是如果复选框在K列中,我希望函数8R运行。我使用带有类似问题的线程尝试合并这两个脚本,但在第2行中不断出现错误

我所得到的错误不见了;在语句之前:第2行

以下是我所拥有的:

function onEdit(e) {
8R();
7R();
}

function 8R() {
//Get the sheet you want to work with. 
var editrange = {
  top : 2,
  bottom : 260,
  left : 11,
  right : 11};
//getRow() and not getrow()
var thisrow = e.range.getRow();
if (thisrow < editrange.top || thisrow > editrange.bottom) return;
//getColumn() and not getcolumn()
var thiscolumn = e.range.getColumn();
if (thiscolumn < editrange.left || thiscolumn > editrange.right) return;
//Line that replaces the erroneous 'var ss = e.range.getSheet()';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Responsible");
//Grab the entire Range, and grab whatever values you need from it. EX: 
rangevalues
var range8 = sheet.getRange("K3:K90");
var range28 = sheet.getRange("M3:M90");
var range2values8 = range28.getValues();
var rangevalues8 = range8.getValues();
//Loops through range results
for (var i in rangevalues8) {
  Logger.log("rangevalues8["+i+"]["+0+"] is:"+rangevalues8[i][0]);//Added
  //Set the rules logic
  if (rangevalues8[i][0] == true) { //Modified
  //Set the cell 
  range2values8[i][0] += 1; //Directly add 1 to range2values
  Logger.log(range2values8);//Added
  }
}
//copy new information
var destination = ss.getSheetByName('Compiled Data');//whatever page
var destCell8 = destination.getRange("I3:I90");
destCell8.setValues(range2values8);
//clear checkboxes
var cleaning = ss.getSheetByName('Asset Bank');
var cleaningcell8 = cleaning.getRange("A3:A90").getValues();
range8.setValues(cleaningcell8);
}

function 7R() {
//Get the sheet you want to work with. 
var editrange = {
  top : 2,
  bottom : 260,
  left : 6,
  right : 6};
//getRow() and not getrow()
var thisrow7 = e.range.getRow();
if (thisrow7 < editrange.top || thisrow7 > editrange.bottom) return;
//getColumn() and not getcolumn()
var thiscolumn7 = e.range.getColumn();
if (thiscolumn7 < editrange.left || thiscolumn7 > editrange.right) return;
//Line that replaces the erroneous 'var ss = e.range.getSheet()';
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Responsible");
//Grab the entire Range, and grab whatever values you need from it. EX: 
rangevalues
var range7 = sheet.getRange("F3:F90");
var range27 = sheet.getRange("H3:H90");
var range2values7 = range27.getValues();
var rangevalues7 = range7.getValues();
//Loops through range results
for (var i in rangevalues7) {
  Logger.log("rangevalues7["+i+"]["+0+"] is:"+rangevalues7[i][0]);//Added
  //Set the rules logic
  if (rangevalues7[i][0] == true) { //Modified
    //Set the cell 
    range2values7[i][0] += 1; //Directly add 1 to range2values
    Logger.log(range2values7);//Added
  }
}
//copy new information
var destination = ss.getSheetByName('Compiled Data');//whatever page
var destCell7 = destination.getRange("I93:I180");
destCell7.setValues(range2values7);
//clear checkboxes
var cleaning = ss.getSheetByName('Asset Bank');
var cleaningcell7 = cleaning.getRange("A3:A90").getValues();
range7.setValues(cleaningcell7);
}

这里有一个链接,指向我正在使用的所有相关信息的复制表:

Javascript变量和函数名称不能以数字开头。将8R和7R替换为,例如func8R和func7R

除此之外,8R和7R函数尝试立即访问e.range变量,但这在任何地方都没有定义。我假设您正在尝试读取onEdit事件参数,但您必须将其传递给函数,并定义其参数,例如

function onEdit(e) {
  f8R(e);
  f7R(e);
}

function f8R(e) {
  //... continue (remember to also declare on f7R)
如果你想手动测试这个函数,你必须填写这个e参数,就像你在电子表格上实际改变某些东西时环境会做的那样。我喜欢通过编写另一个调用函数来实现这一点,如下所示:

function testOnEdit() {
  onEdit({range: SpreadsheetApp.getActiveSheet().getRange('F2')});
}

终于可以让脚本正常工作了。首先,我按照亨里克的建议更改了名字。然后整理好onEdit块。谢谢大家的帮助和建议。没有你们我还是会对我的机器生气的

function onEdit(e) {
  //don't need entire range, just the column that was modified to figure out which function to call
  var editColumn = e.range.getColumn();

  //confirm edit was a box being checked before running the code (as this seems to run on ANY sheet edit)
  if (e.oldValue === "false" && e.value === "TRUE") {
    if (editColumn === 6)
      func7R(e);
    else if (editColumn === 11)
      func8R(e);
  }
}

function func8R(e) {
  //Get the sheet you want to work with. 
  var editRange = {
    top : 2,
    bottom : 260,
    left : 11,
    right : 11};
  //getRow() and not getrow()
  var thisRow = e.range.getRow();
  if (thisRow < editRange.top || thisRow > editRange.bottom) return;
  //getColumn() and not getcolumn()
  var thisColumn = e.range.getColumn();
  if (thisColumn < editRange.left || thisColumn > editRange.right) return;
  //Line that replaces the erroneous 'var ss = e.range.getSheet()';
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Responsible");
  //Grab the entire Range, and grab whatever values you need from it. EX: rangevalues
  var range8 = sheet.getRange("K3:K90");
  var range28 = sheet.getRange("M3:M90");
  var range2values8 = range28.getValues();
  var rangevalues8 = range8.getValues();
  //Loops through range results
  for (var i in rangevalues8) {
    Logger.log("rangevalues8["+i+"]["+0+"] is:"+rangevalues8[i][0]);//Added
    //Set the rules logic
    if (rangevalues8[i][0] == true) { //Modified
      //Set the cell 
      range2values8[i][0] += 1; //Directly add 1 to range2values
      Logger.log(range2values8);//Added
    }
  }
  //copy new information
  var destination = ss.getSheetByName('Compiled Data');//whatever page
  var destCell8 = destination.getRange("I3:I90");
  destCell8.setValues(range2values8);
  //clear checkboxes
  var cleaning = ss.getSheetByName('Asset Bank');
  var cleaningcell8 = cleaning.getRange("A3:A90").getValues();
  range8.setValues(cleaningcell8);
}

function func7R(e) {
  //Get the sheet you want to work with. 
  var editRange = {
    top : 2,
    bottom : 260,
    left : 6,
    right : 6};
  //getRow() and not getrow()
  var thisrow7 = e.range.getRow();
  if (thisrow7 < editRange.top || thisrow7 > editRange.bottom) return;
  //getColumn() and not getcolumn()
  var thiscolumn7 = e.range.getColumn();
  if (thiscolumn7 < editRange.left || thiscolumn7 > editRange.right) return;
  //Line that replaces the erroneous 'var ss = e.range.getSheet()';
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Responsible");
  //Grab the entire Range, and grab whatever values you need from it. EX: rangevalues
  var range7 = sheet.getRange("F3:F90");
  var range27 = sheet.getRange("H3:H90");
  var range2values7 = range27.getValues();
  var rangevalues7 = range7.getValues();
  //Loops through range results
  for (var i in rangevalues7) {
    Logger.log("rangevalues7["+i+"]["+0+"] is:"+rangevalues7[i][0]);//Added
    //Set the rules logic
    if (rangevalues7[i][0] == true) { //Modified
      //Set the cell 
      range2values7[i][0] += 1; //Directly add 1 to range2values
      Logger.log(range2values7);//Added
    }
  }
  //copy new information
  var destination = ss.getSheetByName('Compiled Data');//whatever page
  var destCell7 = destination.getRange("I93:I180");
  destCell7.setValues(range2values7);
  //clear checkboxes
  var cleaning = ss.getSheetByName('Asset Bank');
  var cleaningcell7 = cleaning.getRange("A3:A90").getValues();
  range7.setValues(cleaningcell7);
}

你调用的函数只接收你给它的参数,你不给你的函数任何参数,它们也不绑定任何可能传递的参数。访问您最喜欢的Javascript参考并查看函数作用域名称空间。同样,如果你的函数是互斥的,你可以执行范围检查来确定要调用哪个,而不是跳过执行。谢谢帮助。我会继续努力的。这就是我们没有钱雇佣知道自己在做什么的人或购买预先制作的程序所得到的。我们让某人在飞行中自学。我很感激你的建议,尤其是关于射程检查的建议。我继续用亨里克的答案得到同样的错误。我更新了帖子以包含错误。丢失的陈述前:第2行。同时请确保问题中的代码反映了提供此缺失信息的代码;before语句:第2行错误。如果你按照Henrique的答案重新命名,但仍然得到相同的错误,请显示该代码。问题中我的原始代码是给出错误的代码。当我重新命名时,我能够保存它,但仍然会出现其他错误。但是我用我贴在下面的脚本把它们整理出来了,我不知道。谢谢我按照你的建议重新命名了它们,但问题依然存在。对我来说,它甚至不允许用这些错误的名称保存文件。抱怨第2行的语法错误,现在它允许保存。您收到的确切错误消息是什么?是保存还是运行?您是否手动触发onEdit?我可以让它保存,但在更改名称时无法运行。我尽我所能去触发它。但现在已经解决了。请参阅下面我的更新答案。