【发布时间】:2017-11-24 03:52:40
【问题描述】:
我有一个适合我的 Google Apps 脚本。与其共享工作表并尝试使用它的其他人会收到消息:
您无权执行该操作。请问楼主 此项目授予您访问权限。
该脚本用于使用新数据行更新现有工作表。它是使用添加到 UI 的菜单项触发的,并执行以下操作:
- 在 GDrive 文件夹中找到一个 .xlsx 文件(此文件由 Web 服务导出并由我们手动放入 GDrive 文件夹,我们无法控制文件的内容或其格式)
- 使用 UrlFetchApp 将文件从 .xlsx 转换为 .gsheet (uploadType=media&convert=true)
- 使用 UrlFetchApp 更改生成的 .gsheet 的文件名和文件夹位置。文件夹位置现在与 .xlsx 文件的位置匹配(当使用 UrlFetchApp 转换文件时,生成的文件似乎放置在 GDrive 的根目录中)
- 使用 DriveApp 获取 .gsheet,然后将其打开以供脚本访问
- 将 .gsheet 中的所有数据存储到二维数组中,使用列标题作为行中每个元素的键
- 将目标工作表中现有数据的所有 ID 值(唯一)存储到一维数组中
- 比较两个数组并从二维数组中删除任何包含与一维数组中的一个匹配的 ID 的行,只在二维数组中留下新数据
- 循环遍历二维数组的每一行,然后遍历目标工作表的每一列,将二维数组行中的数据添加到目标工作表中数据底部的新行,使用列标题的值作为每个元素的键
我知道代码没有问题,因为它对我来说很好,所以它一定是权限问题,但我不知道怎么做。工作表与他们共享,存储文件的 GDrive 文件夹与他们共享。当我第一次自己运行脚本时,我必须授予脚本访问 GDrive 文件夹的权限,这显然已经完成了。
我是我们小组的开发人员,而不是数据的用户,但 atm 我必须运行脚本来更新用户每次需要做的数据,而不是他们自己做,这是...烦人。
非常感谢您在尝试找出问题所在的任何帮助。
编辑: 再次阅读此文件时,我发现当文件被转换时,首先将其保存到 GDrive 根目录,这就是为什么我必须更改文件夹的原因。作为根,它不与该文件的用户共享。这可能是原因吗?如果是这样,我该如何解决这个问题?我可以在转换时指定将生成的文件保存到哪个文件夹吗?
【问题讨论】:
-
如果我没记错的话,用户应该有编辑权限来执行一些脚本。如果他们只有读取权限,那是行不通的。我会查找一些文档。
-
您必须使用以下代码授予共享权限:file.next().setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);
标签: google-apps-script google-sheets google-drive-api google-sheets-api