17

我觉得在这里发帖完全是个菜鸟。我非常了解 CSS、HTML 和 XML,但一直避免使用 JS。我对 javascript 知之甚少,最近开始了 Lynda.com 课程来赶上。对不起我的无知。因此,我真的很难学习 Google Apps 脚本。显然,我需要先学习 JS,然后才能理解其中的任何内容。

我工作的学校(5000 名学生)设置了在线课程。我以数千个谷歌文档工作表的形式创建了课程。这些工作表链接在各种网站上。

我们面临的问题是,当学生打开文档时,他们必须先复制它们才能编辑它们(我当然不希望他们能够编辑原件)。这对于在平板电脑上使用移动浏览器的学生来说真的很糟糕,因为在移动设备上使用桌面 UI 时,在 Google Docs 中制作副本并不能很好地工作。

我知道这种事情可以用脚本自动化。我看过这里,低头看,它有效!三年来我一直在寻找这样的功能,我高兴得尿了裤子。(是的,我知道这很可悲)。

所以,我要问的是,是否有人愿意帮助菜鸟弄清楚如何调整此代码,以便学生单击网站课程上的按钮,它会自动制作并在新选项卡中打开工作表的副本?

/**
 * Copy an existing file.
 *
 * @param {String} originFileId ID of the origin file to copy.
 * @param {String} copyTitle Title of the copy.
 */
function copyFile(originFileId, copyTitle) {
  var body = {'title': copyTitle};
  var request = gapi.client.drive.files.copy({
    'fileId': originFileId,
    'resource': body
  });
  request.execute(function(resp) {
    console.log('Copy ID: ' + resp.id);
  });
} 

昨天花了一整天的时间学习 Javascript,我还有很长的路要走。不知道我需要多长时间才能自己解决这个问题。

4

4 回答 4

14

您当然可以使用 Apps 脚本来做到这一点。只需要几行。事实上,你可以只使用我在下面写的版本。

这是我的做法 -

  1. 确保您的原始文档至少已为将要访问它的人启用。

    访问权限

  2. 从 URL 中获取 fileId -

    在此处输入图像描述

  3. 使用以下代码在 Apps 脚本中编写Web 应用程序 -

    function doGet(e) {
      //file has to be at least readable by the person running the script
      var fileId = e.parameters.fileId;  
      if(!fileId){
        //have a default fileId for testing. 
        fileId = '1K7OA1lnzphJRuJ7ZjCfLu83MSwOXoEKWY6BuqYitTQQ'; 
      }
      var newUrl = DocsList.getFileById(fileId).makeCopy('File copied to my drive').getUrl(); 
      return HtmlService.createHtmlOutput('<h1><a href="'+newUrl+'">Open Document</a></h1>');
    }
    
  4. 将其部署为以访问应用程序的人的身份运行。

    部署设置

要记住的关键一件事是,由 Apps 脚本构建的网络应用程序不能强制自动打开一个新窗口。相反,我们可以在编辑模式下显示一个可点击进入文档的链接。

您可以在这里看到它的实际效果(将创建一些虚拟文件) -

https://script.google.com/macros/s/AKfycbyvxkYqgPQEb3ICieywqWrQ2-2KWb-V0MghR2xayQyExFgVT2h3/exec?fileId=0AkJNj_IM2wiPdGhsNEJzZ2RtZU9NaHc4QXdvbHhSM0E

您可以通过放入自己的fileId.

于 2012-11-06T01:23:07.017 回答
7

由于DocsList已弃用,目前您可以使用以下代码复制文件:

File file=DriveApp.getFileById(fileId).makeCopy(fileName, folder);

如Arun Nagarajan的回答fileId中所述,可以在哪里获得。

于 2016-04-09T07:19:49.830 回答
4

这是正确执行此操作的代码(适用于 2019,2020,2021):

/**
 * Create custom menu when document is opened.
 */
function onOpen() {
  DocumentApp.getUi()
    .createMenu('For Students')
    .addItem('Make a copy', 'makeACopy')
    .addToUi();
}

function makeACopy() {
  var templateId = DocumentApp.getActiveDocument().getId();
  DriveApp.getFileById(templateId).makeCopy();
}
于 2019-04-03T05:01:48.327 回答
4

自 2015 年起更新,Google Script出于未知原因删除了 fileId。之前将“/copy”附加到 Google 文档的 URL 的方法已重新启用。例如)https://docs.google.com/document/d/1GTGuLqahAKS3ptjrfLSYCjKz4FBecv4dITPuKfdnrmY/复制

于 2015-09-16T18:05:21.387 回答