Google apps script 如何在不同域的用户之间复制文件?

Google apps script 如何在不同域的用户之间复制文件?,google-apps-script,Google Apps Script,我想在不在同一域的用户之间复制一份Google电子表格文件。源文件的共享设置为,具有链接的任何人都可以编辑。 我创建了一个调用安装功能的Web应用(执行权限设置为用户访问Web应用): 我希望代码能够读取对所有人开放的源文件,并将本地副本复制到运行Web应用程序的用户的Google驱动器(当然,假设用户接受运行脚本)。该行为在我运行它时起作用(因为我是源的所有者),但在用户来自另一个域时不起作用 对如何实现这一目标有何建议 function doInstall() { // The source

我想在不在同一域的用户之间复制一份Google电子表格文件。源文件的共享设置为,具有链接的任何人都可以编辑。 我创建了一个调用安装功能的Web应用(执行权限设置为用户访问Web应用):

我希望代码能够读取对所有人开放的源文件,并将本地副本复制到运行Web应用程序的用户的Google驱动器(当然,假设用户接受运行脚本)。该行为在我运行它时起作用(因为我是源的所有者),但在用户来自另一个域时不起作用

对如何实现这一目标有何建议

function doInstall() {
// The source file is readable by everybody with the link;
  var file = DocsList.getFileById('0AlVPTKz1xoevdHc1ZTQ2OGFMXXXXXXXYYYYZZZZ');
  file.makeCopy('Test Copy Spreadsheet');
}

我有一个不同但相似的用例和问题。和您一样,任何人都可以通过链接访问我的源文件,并且我的域设置允许用户在我的域之外共享内容。这对我有效,但对他们无效

这可能对您有效,但对我有效(到目前为止):

假设你有你的原始脚本

  • 为“脚本作为web应用程序”创建单独的脚本
  • 编写一个函数(例如loadFileId())以使用ScriptDb存储必要的文件ID。运行loadFileIds()函数
  • 在同一个项目中编写另一个函数(例如getFileId()),在调用时从ScriptDb.getMyDb返回所需的文件Id。避免在此函数中使用DocsList。我最初认为,因为getFileId()将“以我的身份运行”,所以它是可以的,但当其他用户触发脚本时,总是DocsList行导致失败
  • 在文件>管理版本中:保存项目的版本
  • 在“发布”下:将该版本的项目部署为web应用程序。选择将应用程序作为“me”执行(me@mydomain.com)“并将有权访问web应用的用户设置为“任何人”
  • 在原始项目中,转到“管理资源”并输入web应用程序的项目密钥,选择一个版本并复制标识符
  • 编写一个调用yourIdentifier.getFileId()的函数,并(希望如此)返回fileId
  • 根据我目前的经验,当DocsList方法返回null时,外部用户能够访问他们无法访问的文件。但还有一件事要补充。。。您可能会发现您必须与用户共享您的web应用程序脚本。我还没有完全确定这是必要的,但我遇到了错误,当我没有。我取消选中该选项以通过电子邮件向他们发送链接

    我从StackOverflow中学到了如何做到这一点


    正如你所看到的,我仍然在自己解决这个问题,到目前为止,系统的测试只是我模拟其他用户。所以没有承诺。祝你好运我将为您的问题添加星号。

    我相信您的代码应该可以工作,因为所有人都可以访问电子表格。我唯一能想到的另一件事是,如果域管理员禁止在域之外共享文件。如果情况并非如此,那么您应该使用issue trackerSetting打开一个issue,让其在组织外部共享文档。您建议使用Google应用程序脚本的问题跟踪程序?创建。