用于自动制作Google文档副本以进行编辑的脚本

时间:2012-11-04 19:16:22

标签: google-apps-script google-drive-api google-docs google-docs-api

我觉得这里有一个完整的noob帖子。我非常了解CSS,HTML和XML,但总是避免使用JS。我知道很少的javascript,最近开始了一个Lynda.com课程赶上来。对不起我的无知。因此,我真的很难学习Google Apps脚本。显然,我需要学习JS才能理解它。

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

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

我知道这种事情可以通过脚本实现自动化。我看了here,然后看,它有效!我快乐地惹恼我的裤子,因为我已经三年来一直在寻找这样的功能。 (是的,我知道这很难过)。

所以,我要问的是,是否有人愿意帮助一个菜鸟弄清楚如何调整这些代码,以便学生点击网站课程上的按钮,它会自动制作并打开一份副本新标签中的工作表?

/**
 * 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 个答案:

答案 0 :(得分:14)

您当然可以使用Apps脚本执行此操作。只需几行。实际上,您可以使用我在下面编写的版本。

我将如何做到这一点 -

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

    Access rights

  2. 从网址抓取fileId -

    enter image description here

  3. 使用以下代码在Apps脚本中写一个web app -

    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. 将其部署为以访问应用程序的人身份运行。

    deploy settings

  5. 要记住的一件重要事情是,Apps脚本构建的Web应用程序无法强制自动打开新窗口。相反,我们可以在编辑模式下显示可以单击到文档中的链接。

    你可以在这里看到它(将创建一些虚拟文件) -

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

    您可以输入自己的fileId

    来测试

答案 1 :(得分:6)

由于不推荐DocsList,目前您可以使用以下代码制作文件的副本:

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

其中fileId可以按照Arun Nagarajan的answer中的说明获得。

答案 2 :(得分:3)

截至2015年更新Google Script removed the fileId,原因不明。以前添加&#34; / copy&#34;的方法已重新启用Google文档的网址。例)https://docs.google.com/document/d/1GTGuLqahAKS3ptjrfLSYCjKz4FBecv4dITPuKfdnrmY/copy

答案 3 :(得分:0)

以下是正确执行此操作的代码(截至2019年):

/**
 * 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();
}