我有一个谷歌可视化表,我在一个web应用程序中发布。用谷歌图表选择运行服务器端代码
背景: 我运行一个脚本,列出电子表格中谷歌文件夹中的所有文档。然后,我将这个列表推入我在Web应用程序中发布的Google表格中。
需求: 我想直接从Web应用程序管理那些相同的文档列表。当我选择表格上的适用行时,我希望能够将文档从一个文件夹移动到另一个文件夹。
两件事情我已经完成:
- 我有一个脚本,将文件的谷歌驱动器使用它的doc ID移动到特定的文件夹 。
- 我在桌面上有一个事件监听器,这样当你点击一行然后点击删除图标,你会得到一个提示,询问:“确定你想要存档 [输入文档名称]?当我点击确定,我得到我的 测试提示,说“文档归档”。当我点击否,我得到我的 测试提示说“请求取消”。所以从这里,我知道我 有适当的代码(至少这是它的样子)。
我正在挣扎: 我似乎无法得到上面的代码一起工作。事件监听器向我提供了我已解析的文档的URL,仅给出了我的ID。这就是我希望用来获取其他代码的运行方式,但是我想因为我试图从客户端与服务器端进行交互,所以它不起作用。任何人都可以帮我弄明白吗?我知道我需要在客户端运行服务器端脚本时使用google.script.run.withSuccessHandler,但我不知道它如何适用于这种情况,我需要的docid正在收集在表select上。任何帮助表示赞赏,我希望以上是有道理的!
// Draw Dashboard
h2dashboard.bind([h2stringFilter, h2typeFilter], [h2chart]);
h2dashboard.draw(h2dataView);
google.visualization.events.addOneTimeListener(h2chart, 'ready', function() {
google.visualization.events.addListener(h2chart.getChart(), 'select', function() {
var selection = h2chart.getChart().getSelection();
var dt = h2chart.getDataTable();
// Get Value of clicked row
if (selection.length) {
var item = selection[0];
var docurl = dt.getValue(item.row, 1);
var docname = dt.getValue(item.row, 0);
var source = dt.getValue(item.row, 3);
// When button is clicked, show confirm box with value
$(document).ready(function() {
$("#hu2archive").on("click", function() {
var answer = confirm("Are you sure you want to archive " + docname + "?");
if (answer === true) {
var archive = DriveApp.getFolderById("FOLDER ID");
var docid = docurl.match(/[-\w]{25,}/); // This is where I'm grabbing the value from the row.
var doc = DriveApp.getFileById(docid);
doc.makeCopy(archive).setName(doc.getName());
source.removeFile(doc);
alert(docname + " has been archived!");
} else {
alert("Request cancelled");
}
});
});
}
});
});
你有点回答你自己的问题。您正在混合客户端和服务器端代码。在这里可以找到从客户端运行服务器端代码的文档:'https:// developers.google.com/apps-script/guides/html/reference/run'具体来说,所有引用'DriveApp'的代码都需要在服务器端运行。 –
是的 - 这是我的理解,但是我的奋斗目前正在通过事件监听器获取id。我如何将它绑回到Driveapp代码中使用?它可以被绑回吗?我应该以另一种方式去做吗? – Niya