Triggers 如何修复此错误:“quot;执行失败:非法参数";在从活动工作表获取范围(“A3”)中?

Triggers 如何修复此错误:“quot;执行失败:非法参数";在从活动工作表获取范围(“A3”)中?,triggers,google-apps-script,google-sheets,Triggers,Google Apps Script,Google Sheets,我构建这个脚本是为了在范围(3,5)(或“A3”)为空时在工作表的索引3中添加一个新行。这样做,我不需要滚动到最后一个空行向工作表中添加值,我只需将它们添加到第三个空行中,这是在打开文档时创建的。但有一个问题:只有当我打开电子表格文档的其中一张时(准确地说,是#gid=7中的一张),函数才起作用,尽管我的函数中没有这样的条件。因此,如果我打开我的spreadhseet文档时没有任何#gid=gid\u编号),或者通过带有#gid=7的url打开它,它会显示第一个菜单。但是,如果我不这样做(例如,

我构建这个脚本是为了在范围(3,5)(或“A3”)为空时在工作表的索引3中添加一个新行。这样做,我不需要滚动到最后一个空行向工作表中添加值,我只需将它们添加到第三个空行中,这是在打开文档时创建的。但有一个问题:只有当我打开电子表格文档的其中一张时(准确地说,是
#gid=7
中的一张),函数才起作用,尽管我的函数中没有这样的条件。因此,如果我打开我的spreadhseet文档时没有任何
#gid=gid\u编号
),或者通过带有
#gid=7
的url打开它,它会显示
第一个菜单
。但是,如果我不这样做(例如,如果我从其他
#gid=
打开它),则不会显示
第一个菜单。当日志显示此错误消息时:
执行失败:非法参数。(第2252行,文件“mainScript”)[0:06秒总运行时间]
。第2252行是这样的:

Logger.log("activeSheet.getRange(3, 1).getValue() = "+activeSheet.getRange("A3").getValue() );
将此行替换为另一行时,会显示相同的错误:

if(activeSheet.getRange("A3").getValue() !== '') {
如果我用
getRange(3,1)
替换
“A3”
参数,我会得到相同的错误。奇怪的是,当我用
#gid=7
打开工作表时,这个错误没有发生执行
range.getValue
后会发生错误。如何解决这个问题?以下是代码示例:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();

function onOpen() {
  insertEmptyRow();
  var menuEntries = 
    [
    {name: "My Menu", functionName: "myFunction"}
    ];
  ss.addMenu("First menu", menuEntries);
 }

function insertEmptyRow(){
   if(activeSheet.getRange("A3").getValue() !== '') {
     activeSheet.insertRows(3);
     Logger.log("activeSheet.getRange("A3").getValue() = " + activeSheet.getRange("A3").getValue() );
  }
}

我想下面是你需要的。请告诉我这是否是错误的,因为我发现你的原始帖子与你的代码样本有一些差异

如果您说过
如果第3行的第一个单元格为空,请在工作表的索引3中添加新行
,我将结束此操作

function onOpen() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var activeSheet = ss.getActiveSheet();
    insertEmptyRow(activeSheet);
    var menuEntries = [{name: "My Menu", functionName: "myFunction"}];
    ss.addMenu("First menu", menuEntries);
}

function insertEmptyRow(){
    //if(activeSheet.getRange(3, 5).getValue() !== "") { <-- I don't know why you are checking the 5th cell here, as you clearly state first cell in third row as above.

    if(activeSheet.getRange(3, 1).getValue() !== ''){
        activeSheet.insertRows(3);
        Logger.log("activeSheet.getRange(3, 1).getValue() = " + activeSheet.getRange(3, 1).getValue()); <-- I'm also not sure about this, as you check the value of row 3, cell 1 AFTER you have inserted a row. This will always be empty, but you might be doing this for error checking to ensure the process completed properly, so I left it.
    }
}
函数onOpen(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var-activeSheet=ss.getActiveSheet(); insertEmptyRow(活动页); var menuEntries=[{name:“我的菜单”,functionName:“我的函数”}]; ss.addMenu(“第一菜单”,菜单系列); } 函数insertEmptyRow(){
//如果(activeSheet.getRange(3,5).getValue()!==“”){一个可安装的onOpen可能是最好的解决方案,因为您的
onOpen
函数需要授权才能运行(访问电子表格服务)

只需更改函数名,以避免重复触发

示例中的示例代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var activeSheet = ss.getActiveSheet();

function installableOnOpen() {
  insertEmptyRow();
  var menuEntries = 
    [
    {name: "My Menu", functionName: "myFunction"}
    ];
  ss.addMenu("First menu", menuEntries);
 }

function insertEmptyRow(){
   if(activeSheet.getRange(3, 5).getValue() !== '') {
     activeSheet.insertRows(3);
     Logger.log("activeSheet.getRange(3, 1).getValues() = " + activeSheet.getRange(3, 1).getValue() );
  }
}

我可以问一下,你为什么要用自定义gid手动编辑URL?文档有几个gid,我必须编辑它们。每个gid都有一个唯一的
#gid=NUMBER
。删除前两个全局变量,它们会引起麻烦。将它们放在函数中。你尝试过可安装的onOpen吗?我经常在“正常”时这样做onOpen没有启动;)嗨,@Sergeinsas,我还没试过。因为文档上说“当从加载项存储安装加载项或从安装脚本时(仅在旧版本的Google Sheets中)会调用onInstall()触发器。”,我是否应该在新版GAS中使用可安装的
onOpen
?您能提供一些示例代码吗?谢谢!非常感谢,@CameronC。但我的解释确实犯了一个错误。它不是第3行的第一个单元格,但范围(3,5)和这部分函数都可以(像您的一样)。我的问题就是
#gid=
问题。它只在一个gid中起作用!(数字7)。无论如何,谢谢!嘿,我刚刚意识到我的答案中有一个错误。它应该是
函数insertEmptyRow(activeSheet){
很抱歉,我无法为您修复它。我原以为只要onOpen脚本与电子表格关联,它就可以适用于所有情况。您好,@CameronC,我将原始问题更改为添加错误消息日志(很抱歉,以前没有这样做!)。你能给我一些帮助吗?嗨,@Sergeinsas,我将原来的问题更改为添加错误消息日志(很抱歉以前没有这样做!)。你能提供一些帮助吗?嗨,@Sergeinsas,我刚刚尝试了你的测试电子表格(制作了一份副本并获得了授权)。但是错误仍然存在。你知道吗?这是我的测试ss副本:(无论如何,我选择你的答案是因为它是最完整的,而且做了很大的努力)我尝试了你的测试,效果很好…你有什么问题?除非你指定一个特殊的gid,否则菜单仍然不会显示?除了创建触发器和授权之外,我没有对你的工作表做任何更改。(顺便说一句,谢谢你的接受,可惜已经过了赏金期;-)我不得不用它在第二张纸上打开,它也起了作用。