如何在不同域的用户之间制作文件的副本?

时间:2012-10-30 18:38:17

标签: google-apps-script

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

我希望代码能够读取对所有人开放的源文件,并将本地副本发送到运行Web App的用户的Google Drive(当然假设用户接受运行脚本)。当我运行它时行为起作用(因为我是源的所有者)但如果用户来自另一个域则不起作用。

有关如何实现这一目标的任何建议吗?

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

1 个答案:

答案 0 :(得分:0)

我有一个不同但相似的用例和问题。与您一样,任何拥有该链接的人都可以访问我的源文件,我的域设置允许用户在我的域外共享内容。它对我有用,但不适合他们。

这可能对你有用,对我来说(到目前为止):

假设你有原始剧本......

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

    我从examples in the documentationthis video以及StackOverflow学习了如何做到这一点。

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