我有一个谷歌可视化表,我在网络应用程序中发布。
背景 我运行一个脚本,列出电子表格中google文件夹中的所有文档。然后我将该列表推送到我在网络应用程序中发布的Google桌面。
需要: 我想直接从Web应用程序管理那些相同的文档列表。我希望能够在桌面上选择适用的行时将文档从一个文件夹移动到另一个文件夹。
我完成了两件事:
我挣扎的是什么: 我似乎无法让上面的代码一起工作。事件监听器正在向我提供我已解析的文档的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");
}
});
});
}
});
});
答案 0 :(得分:1)
我得到了它!我很难理解的是如何将变量从客户端传递给code.gs.我只在客户端的code.gs上运行一个脚本按钮提交但从未传回任何东西。
所以我最终将我的代码更改为下面的代码,它将我需要的变量传递给successhandler,其中archiveDoc是我的code.gs中的函数.docurl是我需要从eventlistener传递的变量的名称。
if (answer === true) { google.script.run.withSuccessHandler(onSuccess).withFailureHandler(err).archiveDoc(docurl);
我还是新编码所以我刚学到了新东西!谢谢Spencer Easton。事实上我确实回答了我自己的问题。