因此,我在使用Google电子表格和应用脚本编写的应用程序中遇到了问题。我已经整理了一步,以重制它。
摘要:
从脚本编辑器内部调用时,任何使用SpreadsheetApp.openByUrl()和SpreadsheetApp.openById()的脚本都可以正常工作,但即使是从内部包含该脚本的电子表格中调用,也会产生错误。
错误讯息:
错误
您无权执行该操作。 (第?行)。
重现它的步骤:
制作新的Google电子表格
打开其脚本编辑器(“工具”菜单>>“脚本编辑器...”)
选择空白项目
粘贴此代码
函数demo1(){
返回“猫”;
}
函数demo2(){
返回[[“ bob”,“ fred”],[“ x”,“ y”]];
}
函数demo3(){
Logger.log(“ demo3-1”)
ss = SpreadsheetApp.openByUrl(“ [== URL ==]”)
名称= ss.getName()
Logger.log(“ demo3-2” +名称)
返回名称
}
函数demo4(){
Logger.log(“ demo4-1”)
ss = SpreadsheetApp.openById(“ [== id ==]”)
名称= ss.getName()
Logger.log(“ demo4-2” +名称)
返回名称
}
更改“ [== URL ==]”和“ [== id ==]”以引用您自己的文档
保存脚本
从运行菜单中,选择demo1。这将引发有关特权的问题。授予它所要求的特权。 (要求访问您的Google云端硬盘)
返回电子表格本身
将以下单元格设置为具有以下公式:
A1:= demo1()
C2:= demo2()
F1:= demo3()
h1:= demo4()
请注意,前两个工作正常,因此电子表格正在查看脚本项目并能够从中运行代码(因此它有权从该脚本中运行代码),但是后两个工作不正常,并抱怨它没有以下权限:执行该动作。
那么我该如何解决呢?我是在做错什么还是有潜在的问题?
最佳答案
此错误是由于Google最近推出的更改所致,它禁止在自定义函数中使用SpreadsheetApp.openByUrl()(或SpreadsheetApp.openById())。
您仍然可以在菜单项,触发器等其他上下文中使用此方法。出于安全原因,Google必须推出此更改,并且它们将无法还原为旧的行为。因此,唯一可能的解决方法很可能是将该函数重写为“常规” GAS函数,而不是自定义函数。
该问题在issue tracker中列出。