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

use*_*533 14 google-docs google-docs-api google-apps-script google-drive-api

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

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

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

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

那么,是什么我问的是,会有人愿意帮助一个noob弄清楚如何去适应这个代码,以便学生点击一个网站的课的按钮,它会自动在新标签页中打开工作表的副本?

/**
 * 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);
  });
} 
Run Code Online (Sandbox Code Playgroud)

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

Aru*_*jan 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>');
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将其部署为以访问应用程序的人员身份运行.

    部署设置

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

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

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

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


Riy*_*eed 6

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

File file=DriveApp.getFileById(fileId).makeCopy(fileName, folder);
Run Code Online (Sandbox Code Playgroud)

如Arun Nagarajan fileId答案中所解释的那样可以获得.


v.k*_*chy 5

这是正确执行此操作的代码(适用于 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();
}
Run Code Online (Sandbox Code Playgroud)