我有一個谷歌可視化表,我在一個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