Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 用于自动复制Google文档以进行编辑的脚本_Google Apps Script_Google Drive Api_Google Docs_Google Docs Api - Fatal编程技术网

Google apps script 用于自动复制Google文档以进行编辑的脚本

Google apps script 用于自动复制Google文档以进行编辑的脚本,google-apps-script,google-drive-api,google-docs,google-docs-api,Google Apps Script,Google Drive Api,Google Docs,Google Docs Api,我觉得这里简直是个无名小卒。我非常了解CSS、HTML和XML,但总是避免使用JS。我对javascript知之甚少,最近开始了一个Lynda.com课程以迎头赶上。对不起我的无知。因此,我真的很难学习谷歌应用程序脚本。显然,我需要先学习JS,然后才能理解它 我工作的学校(5000名学生)已经建立了在线课程。我以数千份谷歌文档工作表的形式创建了课程。这些工作表链接在各种网站上 我们面临的问题是,当学生打开文档时,他们必须先复制一份文档,然后才能进行编辑(我当然不希望他们能够编辑原始文档)。对于在

我觉得这里简直是个无名小卒。我非常了解CSS、HTML和XML,但总是避免使用JS。我对javascript知之甚少,最近开始了一个Lynda.com课程以迎头赶上。对不起我的无知。因此,我真的很难学习谷歌应用程序脚本。显然,我需要先学习JS,然后才能理解它

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

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

我知道这种事情可以用脚本自动完成。我看了看,低头看,它起作用了!三年来,我一直在寻找这样的功能,我欣喜若狂。(是的,我知道这很悲哀)

因此,我想问的是,有没有人愿意帮助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);
  });
} 

昨天花了一整天的时间学习Javascript,我还有很长的路要走。我不知道自己要花多长时间才能弄明白

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

我会这样做的-

  • 确保您的原始文档至少为将访问它的人员启用了读取功能

  • 从URL获取文件ID-

  • 使用以下代码在应用程序中编写脚本-

    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>');
    }
    
    函数doGet(e){
    //文件必须至少能被运行脚本的人读取
    var fileId=e.parameters.fileId;
    如果(!fileId){
    //具有用于测试的默认文件ID。
    fileId='1K7OA1LNZPHJRUJ7ZJCFLU83MSWOXOEKWY6BUQYITQQ';
    }
    var newUrl=DocsList.getFileById(fileId).makeCopy('File copy to my drive').getUrl();
    返回HtmlService.createHtmlOutput(“”);
    }
    
  • 将其部署为以访问应用程序的人的身份运行

  • 需要记住的一点是,由应用程序脚本构建的web应用程序无法强制自动打开新窗口。相反,我们可以显示一个链接,该链接可以在编辑模式下点击到文档中

    您可以在这里看到它的作用(将创建一些虚拟文件)——


    出于未知原因,您可以将自己的
    fileId

    从2015年起更新,以测试这一点。以前在Google文档的URL中添加“/copy”的方法已重新启用。Ex)

    由于
    DocsList
    已被弃用,因此当前您可以使用以下代码制作文件副本:

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

    其中,
    fileId
    可以按照Arun Nagarajan的解释获得。

    以下是正确执行此操作的代码(在2019202021中工作):


    你的问题到底是什么?基本上,需要通过点击按钮来执行此功能,并在新选项卡中打开文档。正在寻找能够修改代码的人。这不是应用程序脚本代码。你有没有试过学它?(在请人为你写之前)是的,目前正在学习js。我只是想问一下,因为修改代码可能需要10秒钟。我知道我需要学习这些东西。应用程序脚本基本上只使用javascript语法,其他一切都不同(可能有少数例外)。因此,学习其中一个并不能真正帮助学习另一个。嗯,至少不比学习编程多。据我所知,这要求文件共享设置保持为“有链接的任何人”,对吗?注意:如果您授予上述链接访问权限,则它有权添加、更新和删除驱动器中的所有文件。这不起作用。我转到脚本编辑器,复制粘贴代码,用单引号中的唯一文件标识符替换文件ID,但我收到错误消息
    SyntaxError:Unexpected identifier(第1行,文件“code.gs”)
    这行代码对我有效,谢谢!对于上述注释,您不仅需要更改“fileId”,还需要更改“fileName”和“folder”。换句话说,您必须更改三个参数:fileId、fileName、folder。.getFileById需要文件ID,.makeCopy()是可选的;将两者都保留为空,它将采用默认值;保留一个为空,它将假定默认值仅为该值;或者为文件名和文件夹提供两个值以实现最终控制。
    /**
     * 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();
    }