Google apps script 用于自动复制Google文档以进行编辑的脚本
我觉得这里简直是个无名小卒。我非常了解CSS、HTML和XML,但总是避免使用JS。我对javascript知之甚少,最近开始了一个Lynda.com课程以迎头赶上。对不起我的无知。因此,我真的很难学习谷歌应用程序脚本。显然,我需要先学习JS,然后才能理解它 我工作的学校(5000名学生)已经建立了在线课程。我以数千份谷歌文档工作表的形式创建了课程。这些工作表链接在各种网站上 我们面临的问题是,当学生打开文档时,他们必须先复制一份文档,然后才能进行编辑(我当然不希望他们能够编辑原始文档)。对于在平板电脑上使用移动浏览器的学生来说,这真的很糟糕,因为在移动设备上使用桌面用户界面时,在谷歌文档中制作副本并不能很好地工作 我知道这种事情可以用脚本自动完成。我看了看,低头看,它起作用了!三年来,我一直在寻找这样的功能,我欣喜若狂。(是的,我知道这很悲哀) 因此,我想问的是,有没有人愿意帮助noob找出如何调整此代码,以便学生单击网站课程上的按钮,它会自动生成并在新选项卡中打开工作表的副本?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名学生)已经建立了在线课程。我以数千份谷歌文档工作表的形式创建了课程。这些工作表链接在各种网站上 我们面临的问题是,当学生打开文档时,他们必须先复制一份文档,然后才能进行编辑(我当然不希望他们能够编辑原始文档)。对于在
/**
* 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,我还有很长的路要走。我不知道自己要花多长时间才能弄明白 您当然可以使用应用程序脚本来实现这一点。只需要几行。事实上,你可以使用我在下面写的版本 我会这样做的-
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(“”);
}
出于未知原因,您可以将自己的
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();
}