Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 正在尝试为通过表单“文件上载”部分上载的文件设置“任何具有链接的人都可以查看”权限_Google Apps Script_Google Forms_Google Apps Script Api - Fatal编程技术网

Google apps script 正在尝试为通过表单“文件上载”部分上载的文件设置“任何具有链接的人都可以查看”权限

Google apps script 正在尝试为通过表单“文件上载”部分上载的文件设置“任何具有链接的人都可以查看”权限,google-apps-script,google-forms,google-apps-script-api,Google Apps Script,Google Forms,Google Apps Script Api,表单中使用了文件上载部分:我需要表单用户而不是所有者能够与表单所有者以外的其他人共享文件 它显示表单中文件上载的结果,将文件放入当前表单用户的驱动器,并提供表单所有者可以查看的URL。我需要该URL可以通过脚本与其他人共享,而不是手动干预 由表单输入触发,我的脚本运行: DriveApp.getFileById(id).setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.NONE); 。。。其中id来自表单提供的UR

表单中使用了文件上载部分:我需要表单用户而不是所有者能够与表单所有者以外的其他人共享文件

它显示表单中文件上载的结果,将文件放入当前表单用户的驱动器,并提供表单所有者可以查看的URL。我需要该URL可以通过脚本与其他人共享,而不是手动干预

由表单输入触发,我的脚本运行:

DriveApp.getFileById(id).setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.NONE);
。。。其中id来自表单提供的URL,请参阅。。。我知道我的身份证是对的

作为一个链接到表单的用户,我没有收到任何错误。。。我也没有看到作为所有者在表单中输入错误

但是,除了电子表格所有者之外,任何人都看不到URL,即使是输入并拥有该文件的用户也不能查看链接。。。所以DriveApp.Access.any_与_链接不工作。表单的非所有者将运行此操作。我猜setSharing是作为表单的所有者而不是用户运行的,因此不能将其设置为可共享?脚本是否有办法使文件/链接可见

但是,即使表单所有者运行表单,其他人也无法查看URL。我认为一旦文件成为可共享文件,ID不会改变吗?所以我一定是打错电话了

也许表单提供的URL中的ID不是文件的真实ID,而是n个无人区

示例例程,该例程使用这些URL在电子表格的第4列下显示,并使其可共享:

`

`


。。。由表单/电子表格的所有者运行,无错误,记录的数据看起来正确。但是,如果将URL提供给另一个用户,则他们会得到一个权限错误。

无论是谁创建表单触发器,表单输入都会运行。如果希望脚本以她的身份运行,请授予她访问脚本和创建表单触发器的宏的权限

这解决了它:

   function SetPermissions() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var maintsheet = ss.getSheetByName('Maintenance');
      var lastmr = maintsheet.getLastRow();
      for (var i = 2; i <= lastmr; i++) {
        var fileURL = maintsheet.getRange(i,4).getValue();
        Logger.log(fileURL);
        for (var j in fileURL.split(",")) {
          Logger.log(fileURL.split(",")[j]);
          var fileID = fileURL.split(",")[j].match(/[-\w]{25,}/)[0]
          Logger.log(fileID);
          var file = DriveApp.getFileById(fileID);
          file.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);
          var newURL = file.getUrl();
          maintsheet.getRange(i, 4).setValue(newURL);
        }
      }
    }
在我的情况下,由于URL将构成电子邮件的消息体,我的呼叫如下所示:

var message = AnyoneWithLinkCanView(dataSheet.getRange(lastr,i).getValue());

谢谢,无论是谁创建表单触发器都可以运行,这是很有用的知识,但是,当通过表单添加文件/pic时,我需要脚本来更改权限。无论如何,当前,当表单/触发器所有者进入表单时,尝试为任何具有链接的人设置权限都不起作用。。。因此,还有其他问题。
function AnyoneWithLinkCanView(urls) {
  var newURLs = "";
  if ( urls.length > 0 ) {
    for each (var j in urls.split(",")) {
      var fileid = j.match(/[-\w]{25,}/)[0];
      var file = DriveApp.getFileById(fileid);
      file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
      if ( newURLs.length > 0 ) {
        newURLs += ", ";
      }
      newURLs += file.getUrl();
    }
  }
  return newURLs;
}
var message = AnyoneWithLinkCanView(dataSheet.getRange(lastr,i).getValue());