【问题标题】:How can my Google Apps Script be run by others the Sheet is shared with?我的 Google Apps 脚本如何由共享工作表的其他人运行?
【发布时间】: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


【解决方案1】:

根据我的经验,我创建了一个电子表格,每次打开电子表格时都会为用户检索 G Suite 许可信息。我所做的是我使用超级管理员创建了脚本,但是当电子表格被共享时,其他用户遇到了同样的问题,直到我从 Apps Script 菜单中转到 Publish > Deploy as Webb App,我留下了像这张图片这样的选项

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

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

您好。

【讨论】:

    【解决方案2】:

    要解决此问题,您需要将脚本部署为网络应用程序(想法来自@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 分钟(左右)才能被允许授权脚本(同时此用户将继续收到红色警告)。

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

    【讨论】:

    • If the owner shares the sheet to a new user, after the script has been deploy as a web app, the new user may need to wait 15 minutes (or so) 是您回答中帮助我的部分。我不需要部署为 Web 应用程序,我只需要在与新用户共享工作表后等待大约 15 分钟,然后新用户才能运行脚本。
    • @browly:你是怎么知道 15 分钟技巧的?它实际上对我有用
    【解决方案3】:

    在尝试将脚本作为 Web 应用程序后,我得到了“doGet”。 “doGet”是什么意思?

    【讨论】:

    • WebApp 需要 doGet 或 doPost 函数才能运行:https://developers.google.com/apps-script/guides/web 您可以将其添加到脚本顶部以满足该要求:function doGet(e) { var params = JSON.stringify(e); return HtmlService.createHtmlOutput(params); }
    【解决方案4】:

    我确认@MagTun 和@browly 共享文件的解决方案并等待15 分钟。即使我以编程方式授予了文件的编辑权限,我上周也遇到了这个问题。棘手,因为有些用户会通过屏幕授予权限(正确),但有些用户会收到“您需要权限”消息或“抱歉,此时无法打开文件”(错误)。但我观察到,一段时间后,用户可以在有或没有明确请求访问文件的情况下运行脚本。所以真的没有什么需要的,只需要等待大约 15 分钟,它会一直提示许可。感谢您的提示,它确认了我的问题的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多