使用谷歌图表选择运行服务器端代码



我有一个谷歌可视化表,正在web应用程序中发布。

背景:我运行了一个脚本,该脚本列出了电子表格中谷歌文件夹中的所有文档。然后我把这个列表推到我在网络应用程序中发布的谷歌表格中。

需要:我想直接从web应用程序管理那些相同的文档列表。当我在表上选择适用的行时,我希望能够将文档从一个文件夹移动到另一个文件夹。

我完成了两件事:

  1. 我有一个脚本,可以将文档移动到使用其文档id的谷歌驱动器
  2. 我在表上有一个事件侦听器,这样当您单击一行并然后单击删除图标,您会得到一个提示,询问"确定"是否要存档[输入文档名称]?"当我单击"确定"时,我会得到显示"文档存档"的测试提示。当我单击"否"时,我会得到显示"请求已取消"的测试提示。因此,我知道我拥有合适的代码(至少看起来是这样)

我正在努力解决的问题:我似乎无法让上面的代码协同工作。事件侦听器向我提供了我解析过的文档的url,只给了我id。这是我希望用来运行其余代码的,但我认为因为我试图从客户端与服务器端交互,所以它不起作用。有人能帮我弄清楚吗?我知道在从客户端运行服务器端脚本时,我需要使用google.script.run.withSuccessHandler,但我不知道它如何应用于这种情况,我需要的docid正在表选择上收集。任何帮助都将不胜感激,我希望以上内容有意义!

// 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"); 
}
});
});
}
}); 
});

我刚刚拿到!我很难理解的是如何将变量从客户端传递给code.gs。我只在提交按钮上从客户端运行过code.gs中的脚本,但从未返回任何内容。

因此,我最终将代码更改为下面的,它将我需要的变量传递到一个成功处理程序中,其中archiveDoc是我的代码.gs中的函数,docurl是我需要从eventlistener传递的变量的名称。

if (answer === true) { google.script.run.withSuccessHandler(onSuccess).withFailureHandler(err).archiveDoc(docurl);

我对编码还是个新手,所以我刚刚学到了一些新东西!谢谢Spencer Easton。事实上,我确实回答了自己的问题。

最新更新