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脚本执行此操作.只需几行.实际上,您可以使用我在下面编写的版本.
我就是这样做的 -
确保至少为将要访问它的人员启用原始文档.

从URL抓取fileId -

使用以下代码在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)将其部署为以访问应用程序的人员身份运行.

要记住的一件重要事情是,Apps脚本构建的Web应用程序无法强制自动打开新窗口.相反,我们可以在编辑模式下显示可以单击到文档中的链接.
你可以在这里看到它(将创建一些虚拟文件) -
您可以通过放入自己的测试来测试fileId.
由于DocsList不推荐使用,目前您可以使用以下代码制作文件的副本:
File file=DriveApp.getFileById(fileId).makeCopy(fileName, folder);
Run Code Online (Sandbox Code Playgroud)
如Arun Nagarajan fileId在答案中所解释的那样可以获得.
这是正确执行此操作的代码(适用于 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)
| 归档时间: |
|
| 查看次数: |
24535 次 |
| 最近记录: |