Mad*_*d G 3 google-docs google-sheets google-apps-script
所以我在使用谷歌电子表格和应用程序脚本编写的应用程序中遇到了问题。我已经整理了一个分步指南来重现它。
总结: 任何使用 SpreadsheetApp.openByUrl() 和 SpreadsheetApp.openById() 的脚本在从脚本编辑器内部调用时都可以正常工作,但从内部调用时会出现错误,即使是包含该脚本的同一个电子表格。
错误信息:
错误 您无权执行该操作。(线 ?)。
重现它的步骤:
粘贴此代码
功能演示1(){ 返回“猫”; } 功能演示2(){ 返回 [["bob", "fred"], ["x", "y"]]; } 功能演示3(){ Logger.log("demo3-1") ss = SpreadsheetApp.openByUrl("[==URL==]") 名称 = ss.getName() Logger.log("demo3-2" + 名称) 返回名称 } 功能演示4(){ Logger.log("demo4-1") ss = SpreadsheetApp.openById("[==id==]") 名称 = ss.getName() Logger.log("demo4-2" + 名称) 返回名称 }
将“[==URL==]”和“[==id==]”更改为引用您自己的文档
保存脚本
从运行菜单中选择demo1。这将引发一个关于权限的问题。授予它所要求的特权。(要求访问您的 Google 云端硬盘)
回到电子表格本身
将以下单元格设置为具有这些公式:
A1:=演示1() C2:=演示2() F1:=演示3() h1:=演示4()
请注意,前两个工作,因此电子表格看到脚本项目并能够从中运行代码(因此它有权从该脚本运行代码)但后两个不起作用并抱怨它没有权限执行那个动作。
那么我该如何解决这个问题?我做错了什么还是有潜在的问题?
我昨天实际上发现了一个很好且简单的解决方法。希望此解决方法适合您。
通过阅读SpreadsheetApp文档,我发现了一个通过提供相应File
对象来打开电子表格的函数。
这是该部分:https :
//developers.google.com/apps-script/reference/spreadsheet/spreadsheet-app#open(File)
该示例表明您可以轻松地在 Google Drive 中搜索文件类型(在本例中为电子表格)。但是,您无需搜索整个 Drive 库,而只需使用文件/电子表格的 ID 即可DriveApp.getFileById(ID)
。
这是该功能的文档:https : //developers.google.com/apps-script/reference/drive/drive-app#getFileById(String)
您需要做的就是:
docs.google.com/spreadsheets/d/{ID}/edit#gid=0
SpreadsheetApp.open(DriveApp.getFileById(ID))
检索您的Spreadsheet
对象拥有对象后,您可以进行其他处理。如果这有帮助,请告诉我们。