我觉得这里有一个完整的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,我还有很长的路要走。不知道我能花多长时间自己解决这个问题。
答案 0 :(得分:14)
您当然可以使用Apps脚本执行此操作。只需几行。实际上,您可以使用我在下面编写的版本。
我将如何做到这一点 -
确保至少为将要访问原始文档的人员启用原始文档。
从网址抓取fileId -
使用以下代码在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>');
}
将其部署为以访问应用程序的人身份运行。
要记住的一件重要事情是,Apps脚本构建的Web应用程序无法强制自动打开新窗口。相反,我们可以在编辑模式下显示可以单击到文档中的链接。
你可以在这里看到它(将创建一些虚拟文件) -
您可以输入自己的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();
}