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