我的Google Apps脚本如何由其他人共享?

Bad*_*die 9 google-sheets google-apps-script google-drive-api google-sheets-api

我有一个适用于我的Google Apps脚本.与表共享的其他人试图使用它获取消息:

您无权执行该操作.请让此项目的所有者授予您访问权限.

该脚本用于使用新的数据行更新现有工作表.它是使用添加到UI的菜单项触发的,并执行以下操作:

  • 在GDrive文件夹中查找.xlsx文件(此文件由Web服务导出并由我们手动放入GDrive文件夹,我们无法控制文件的内容或其格式)
  • 使用UrlFetchApp将文件从.xlsx转换为.gsheet(uploadType = media&convert = true)
  • 使用UrlFetchApp更改生成的.gsheet的文件名和文件夹位置.文件夹位置现在与.xlsx文件的位置匹配(使用UrlFetchApp转换文件时,生成的文件似乎放在GDrive的根目录中)
  • 使用DriveApp获取.gsheet,然后打开它以供脚本访问
  • 使用列标题将.gsheet中的所有数据存储到2d数组中,作为行中每个元素的键
  • 将目标表中现有数据的所有ID值(唯一)存储到1d数组中
  • 比较两个数组并从2d数组中删除包含与1d数组中的ID匹配的ID的所有行,仅在2d数组中保留新数据
  • 循环遍历2d数组的每一行,然后遍历目标工作表的每一列,将数据从2d数组行添加到目标工作表中数据底部的新行,使用列标题的值作为键每个元素

我知道代码没有问题,因为它适用于我,所以它一定是权限问题,但我无法弄清楚如何.工作表与它们共享,存储文件的GDrive文件夹与它们共享.当我第一次自己运行脚本时,我必须授予脚本访问GDrive文件夹的权限,这显然已经完成了.

我是我们小组的开发人员,而不是数据的用户,但是我必须运行脚本来为用户每次需要时更新数据,而不是仅仅自己做,这是...烦人.

任何帮助,试图找出问题在这里的位置非常感谢.

编辑:再次阅读它,我发现当文件转换时,首先它保存到GDrive根,这就是为什么我必须更改文件夹.作为根,它不与该文件的用户共享.这可能是原因吗?如果是这样,我怎么能解决这个问题呢?我可以在转换时指定应将结果文件保存到哪个文件夹吗?

Mag*_*Tun 5

要解决此问题,您需要将脚本部署为 Web 应用程序(想法来自 @MarioR 答案,但设置不同):

  • 使用所有者帐户,打开工作表,然后打开脚本编辑器
  • 点击Publish然后Deploy as web app
  • 对于Execute the app as,选择User accessing the web app和对于Who has access to the app,选择Anyone

用户第一次尝试使用该脚本时,他们必须允许该脚本(如果他们得到This app isn't verified,他们应该点击Advanced底部的 ,然后点击Go to <script name> (unsafe))。在此之后,他们可能需要刷新工作表才能运行脚本。

如果所有者将工作表共享给新用户,则在将脚本部署为 Web 应用程序后,新用户可能需要等待 15 分钟(左右)才能允许对脚本进行授权(同时该用户将继续获得红色警告)。

只有所有者可以部署为 Web 应用程序,其他尝试使用它的用户不会收到消息错误,只是一个Fetching Data永远卡住的弹出窗口!) 要更改所有者:使用所有者帐户打开工作表,单击Share> Advanced> 点击触发“未来所有者”旁边的下拉菜单的箭头 > Set as owner

  • “如果所有者将工作表共享给新用户,则在将脚本部署为 Web 应用程序后,新用户可能需要等待 15 分钟(左右)”是您对我有帮助的答案的一部分。我不需要部署为 Web 应用程序,只需在与新用户共享工作表后等待约 15 分钟,新用户就可以运行脚本。 (2认同)

小智 3

根据我的经验,我创建了一个电子表格,每次打开电子表格时都会检索用户的 G Suite 许可证信息。我所做的是,我使用超级管理员创建了脚本,但是当共享电子表格时,其他用户遇到了同样的问题,直到我从“应用程序脚本”菜单中转到“发布”>“部署为 Webb 应用程序”,我保留了如下图所示的选项

在此输入图像描述

这对我有用,我希望它对你有用。在此更新后,对电子表格具有编辑权限的所有用户都可以在每次打开电子表格时代表超级管理员检索信息。只需确保以使用脚本或电子表格的身份执行应用程序you,而不是以the user使用脚本或电子表格的身份执行应用程序。

通常其他用户无法运行需要管理员权限的脚本,但这解决了我的问题。请告诉我这是否对您有用!

问候。