1

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

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

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

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

1 回答 1

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。

以我迄今为止的经验,外部用户已经能够访问当 DocsList 方法返回 null 时他们无法访问的文件。但是还有一件事要添加......您可能会发现您必须与您的用户共享您的网络应用程序脚本。我还没有完全确定这是必要的,但是当我不这样做时我遇到了错误。我取消了通过电子邮件将链接发送给他们的选项。

我从文档中的示例此视频以及 StackOverflow中学习了如何做到这一点。

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

于 2012-11-01T03:44:12.747 回答