【问题标题】:How to give viewing access to a certain folder through google apps scripts如何通过谷歌应用脚​​本授予对某个文件夹的查看权限
【发布时间】:2017-11-29 02:53:49
【问题描述】:

我有一个收集电子邮件地址的谷歌表单,它连接到电子表格。通过谷歌应用程序脚本(工具->脚本编辑器),我想在每次添加新电子邮件时访问通过表单收集的电子邮件地址。在电子表格中,我将时间戳记作为第 1 列,将电子邮件作为第 2 列,我在其他列中也有其他不重要的数据。行无关紧要。到目前为止,这是我的代码:

function giveaccess() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startColumn = 2;
  var numColumns = 99;
  var dataRange = sheet.getRange(startColumn, 2, numColumns, 99)
  var data = dataRange.getValues();
  for (i in data) {
    var row = data[i];
    var emailAddresses = row[0];
    addViewers(emailAddresses)
  }
}

我收到错误“ReferenceError:“addViewers”未定义。”但我希望有人告诉我做我上面提到的任何其他方法。谢谢! :D

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-drive-api google-spreadsheet-api


    【解决方案1】:

    使用 Apps 脚本共享云端硬盘文件夹中的文件可以通过 setSharing(accessType, permissionType) 完成:

    setSharing(accessType, permissionType)

    设置哪些类别的用户可以访问文件以及哪些权限 除了已被授予的任何个人用户之外,这些用户被授予 明确授予访问权限。

    示例代码:

    // Creates a folder that anyone on the Internet can read from and write to. (Domain
     // administrators can prohibit this setting for users of a G Suite domain.)
     var folder = DriveApp.createFolder('Shared Folder');
     folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);
    

    访问类型的其他值可在Enum Access 中找到:

    - ANYONE
    - ANYONE_WITH_LINK
    - DOMAIN  
    - DOMAIN_WITH_LINK
    - PRIVATE
    

    【讨论】:

    • Doesn't "var folder = DriveApp.createFolder('Shared Folder'); folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.EDIT);"每次有人填写表格时都创建一个 bew 文件夹?
    【解决方案2】:

    我想在您的通知中提几点:

    1. addViewers() 应该在工作表上调用(如sheet.addViewers(emailAddressesArray)),并且需要一个电子邮件地址数组,目前您正在向它提供一行工作表,而不是调用任何工作表。 https://developers.google.com/apps-script/reference/spreadsheet/spreadsheet#addviewersemailaddresses

    2. getValues() 返回一个二维数组

    3. 您正在获取 99 列,我不知道您为什么要这样做。我不是说你有什么问题。

    4. 我认为你在这里出错了。正确:getRange(row, column, numRows, numColumns) 你的:getRange(startColumn, 2, numColumns, 99) https://developers.google.com/apps-script/reference/spreadsheet/sheet#getrangerow-column-numrows-numcolumns

    建议的解决方案:

    1. 获取电子邮件列

    2. 将电子邮件放入数组中。你可以使用 array.push(email)。

    3. 然后在要授予访问权限的工作表上调用 addViewers 并将电子邮件地址数组传递给它。赞sheet.addViewers(emailAddressesArray);

    有效的解决方案是仅添加新提交的电子邮件 ID,而不是添加所有电子邮件 ID。

    编辑:如何仅添加新提交的电子邮件以及如何授予对现有文件夹的访问权限。

    新提交的回复会插入到工作表的底部,因此您可以通过获取最后一行来获取最后提交的回复。 [但我认为如果您的表单被非常非常频繁地使用,那么这可能会失败。否则,没关系]。

    要获取最后一行,我们可以使用sheet.getLastRow()

    https://developers.google.com/apps-script/reference/spreadsheet/sheet#getlastrow

    您可以通过按 id 获取文件夹然后授予对该文件夹的访问权限来授予对现有文件夹的访问权限。

    https://developers.google.com/apps-script/reference/drive/drive-app#getfolderbyidid

    文件夹的 ID 存在于该文件夹的 URL 中。 (我认为简单的谷歌搜索足以指导你,所以我跳过提及这一点)

    让我知道你的想法。

    谢谢。

    【讨论】:

    • 对不起,我还是不明白。您是否可以重新键入我需要的代码。我希望我没有要求太多,但我不知道 Javascript(还)编辑:我将如何拥有它,以便它只会添加新提交的电子邮件而不是所有电子邮件,因为这会向所有人发送电子邮件之前已经报名了。是否可以将其链接到现有的谷歌驱动器文件夹?
    • 我已经用你的观点更新了我的答案。 1. 获取新提交的电子邮件 2. 授予对现有文件夹的访问权限
    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2013-10-07
    • 2016-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多