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 sheets脚本给我;对象不允许添加或更改属性;错误。我怀疑与getRange有关的问题_Google Apps Script_Google Sheets_Google Spreadsheet Api - Fatal编程技术网

Google apps script Google sheets脚本给我;对象不允许添加或更改属性;错误。我怀疑与getRange有关的问题

Google apps script Google sheets脚本给我;对象不允许添加或更改属性;错误。我怀疑与getRange有关的问题,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,我正在尝试创建一个自定义触发器函数,它将在编辑时触发。我的目标是跟踪某个工作表的特定范围何时被修改或添加,并通过在某个单元格中添加字符串在另一个工作表中捕获该范围。 该更新标记必须位于列I中,与修改单元格ID的引用所在的行相交 现在,当我试着运行它时,它给了我那个错误,但它没有进一步的解释,所以我不知道如何继续。 你能帮帮我吗? 这是我的代码: 函数onEdit(){ var ss=SpreadsheetApp.getActive(); var e=ss.getActiveSheet() va

我正在尝试创建一个自定义触发器函数,它将在编辑时触发。我的目标是跟踪某个工作表的特定范围何时被修改或添加,并通过在某个单元格中添加字符串在另一个工作表中捕获该范围。 该更新标记必须位于列I中,与修改单元格ID的引用所在的行相交

现在,当我试着运行它时,它给了我那个错误,但它没有进一步的解释,所以我不知道如何继续。 你能帮帮我吗? 这是我的代码:

函数onEdit(){
var ss=SpreadsheetApp.getActive();
var e=ss.getActiveSheet()
var ecell=e.getActiveCell()
var allsheets=ss.getSheets();
var version=“0.4.0”;
//确保更新的内容不在前5列,也不在前2行
如果(e.columnStart<5 | | e.rowStart<2 | | e.getSheetName()==“0.4.0”)返回;
//正在尝试获取指向F2单元格的hlook
var hlook=e.getRange('F2');
//想在F2中设置一个公式,这样我就可以得到ecell的索引(手动ID)值的位置
hlook.setFormula=“HLOOKUP(ecell,'A'+行(ecell)+':'+Q'+行(ecell),3)”;
//要检索从公式返回的值吗
var eid=hlook.getActiveCell().getValue();
//导航所有可用图纸以设置更新
用于(所有表中的var s){
var表=所有表;
//驳回主控表
如果(sheet.getSheetName()!=“0.4.0”)
{
//将变量分配给AA1(或者更进一步,这很好)
var con=e.getRange(1,28);
//建立公式
con.setFormula=“IFERROR(VLOOKUP(eid,'C1:C35',1),false)”;
//检索公式结果
var control=con.getActiveCell().getValue();
如果(控制!=错误)
{
//如果我要查找的值实际上存在于该工作表中,请在找到该值的行的第I列输入updatestamp
var ro=VLOOKUP(eid,“C1:C350”,1);
var cel=“I”+ro;
cel.setValue(版本)
}
}
}

}
所以我认为您的问题在于.setFormula。键入.setFormula=“…公式…”时;脚本认为您要编辑“setFormula”对象。事实上,您希望执行操作setFormula,因此您应该采用以下格式:

hlook.setFormula("...formula...");
另一件你想看的是你的公式。你会发现,一旦出现在表单上,谷歌表单就不会知道什么是ecell。ecell的A1表示法可通过以下方式在ecell变量中获取:

var ecell = e.getActiveCell().getA1Notation();
然后,您可以将其替换为公式,如下所示:

hlook.setFormula("HLOOKUP(" + ecell + ", 'A'+ ROW(" + ecell + ") + ':' + 'Q' + ROW(" + ecell + "),3)");
我刚刚评论了在何处以这种方式修改代码以更正它:

function onEdit() {
  var ss = SpreadsheetApp.getActive();
  var e = ss.getActiveSheet();
  var ecell= e.getActiveCell().getA1Notation();
  var allsheets = ss.getSheets();
  var version = "0.4.0";
  //Making sure that whatever was updated it is not in the first 5 columns nor in the first 2 rows
在这里修改-if语句需要{},格式化if(语句){action},所以在{return;}周围用花括号括起来

  if (e.columnStart < 5 || e.rowStart < 2 || e.getSheetName() =="0.4.0") return; //why not use version variable here?

  //Trying to get hlook pointing to the F2 cell
  var hlook= e.getRange('F2');
  // Want to set up a formula in F2 so that I can get de location of the index (manual ID) value of ecell
修改脚本-您需要hlook的值,所以

var eid = hlook.getValue();
*******************************
  var eid=hlook.getActiveCell().getValue();
  //Navigting all available sheets to set up updates
  for (var s in allsheets){
    var sheet=allsheets[s];
    // Dismissing the master sheet
    if (sheet.getSheetName()!="0.4.0")
   {
     //Assigning a variable to AA1 (or even further, whith is fine)
     var con=e.getRange(1,28);
     //Setting up a formula
修改SETFORMULA()

在此修改-

var ro = "VLOOKUP(" + eid + ", "C1:C350",1)";
*******************************

       var ro=VLOOKUP(eid, "C1:C350",1);
       var cel="I" + ro;
       cel.setValue(version)
      }
    }
  }
}

希望通过这些修改它能工作,但是如果您有错误,请告诉我我会再看一眼:)祝您好运

谢谢您的时间和建议!我试过了,但是我想我不能给一个单元格赋值,所以,直到我发现为什么我不能赋值,这个项目被搁置了:(你能不能把你最新的代码作为一个编辑发布?我很乐意再看一遍,并有可能尝试复制你的问题。我不确定你自上次以来可能做了什么改变。
     con.setFormula="IFERROR(VLOOKUP(eid, 'C1:C35',1), false)";
     // Retrieving formula result
     var control=con.getActiveCell().getValue();
     if (control!=false)
     {
       //If the value I am looking for actually existws on this sheet, enter update stamp at column I on the row where the value was found
var ro = "VLOOKUP(" + eid + ", "C1:C350",1)";
*******************************

       var ro=VLOOKUP(eid, "C1:C350",1);
       var cel="I" + ro;
       cel.setValue(version)
      }
    }
  }
}