App Script上的setSharing方法不适用于G Suite用户吗?

时间:2018-06-19 18:13:24

标签: google-apps-script

我正在尝试创建文档并设置其访问权限。 以下代码适用于我的普通Gmail帐户。

但是,当我在唯一的GSuite地址上运行它时,它会返回此错误:

  

TypeError:在对象Document中找不到函数setSharing。 (线   6,文件“代码”)

代码如下:

    function createAndSendDocument() {

  //Create a new Google Doc named 'Hello, world!'
  var doc = DocumentApp.create('Hello World');

  //Set user permissions to view and edit.
  doc.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);

  //Access the body of the document, then add a Paragraph.
  doc.getBody().appendParagraph('This is a test document for people to see and try and lorem ipsum.');

  //Get the URL of the doc
  var url = doc.getUrl();

  //Get email address of the active user - aka you.
  var email = 'example@domain.com';

  //Get the name of doc to use as an email subject line
  var subject = doc.getName();

  //Add a new strong to the url variable to use as an email body.
  var body = 'Link to your document: ' + url;

  //Send yourself an email with a link to the document.
  GmailApp.sendEmail(email, subject, body); 

}

如何解决此问题或正确使用setSharing方法?我使用错误的方法还是缺少其他步骤,如

2 个答案:

答案 0 :(得分:1)

我从一个非GSuite帐户遇到了这个问题,并通过使用Drive api(而不是Document)来解决了。

例如

var drivedoc = DriveApp.getFileById(documentId);
drivedoc.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);

有效,但是当我使用DocumentApp.getFileById时却没有。

答案 1 :(得分:0)

我自己也遇到了类似的问题,可能会对您有所帮助。我使用DocumentApp api创建了一个文档。然后,我使用DriveApp api设置共享。请注意,您从同一文档获得的URL是不同的。如果您与G Suite组织外部的人通过电子邮件从DocumentApp获取文档的URL,则即使共享设置为“具有链接的任何人,也无需登录”,他们仍必须登录才能打开文档。 ”但是,如果您将从DriveApp获得的URL通过电子邮件发送给G Suite组织外部的人员,则他们无需登录即可轻松打开链接。因此,我认为,如果您使用DriveApp设置所创建文档的共享,则代码可能会更好。然后,确保您通过电子邮件发送从DriveApp api获得的URL,而不是从DocumentApp api获得的URL。

function myFunction() {
var doc = DocumentApp.create("Test Document");
Logger.log("This is the URL that I get with DocumentApp: " + doc.getUrl());

var documentFileID = doc.getId();
var myFileDriveApp = DriveApp.getFileById(documentFileID);
Logger.log("This is the drive app URL: " + myFileDriveApp.getUrl());

//Set the sharing on the file using DriveApp
myFileDriveApp.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

}