我有一个相当基本的电子表格,它使用一些Google脚本来完成各种任务。我试图清理最终用户的界面,并决定实施Google Picker。最初用户必须手动将CSV导入电子表格。这里的新目标是通过Google Picker选择CSV,上传,导入,然后删除。我已经有所有代码都可以导入并删除它。我只是为拾取器编写代码,它似乎工作正常。但是,我认为我只是遗漏了一些小东西,如何将文件ID从Picker.html传回我的Google脚本以继续我的流程?
如果有帮助,我现在正在使用Google文档中提供的基本回调。我假设这是改变的地方。只是不知道该怎么做。
function pickerCallback(data) {
var action = data[google.picker.Response.ACTION];
if (action == google.picker.Action.PICKED) {
var doc = data[google.picker.Response.DOCUMENTS][0];
var id = doc[google.picker.Document.ID];
var url = doc[google.picker.Document.URL];
var title = doc[google.picker.Document.NAME];
document.getElementById('result').innerHTML =
'<b>You chose:</b><br>Name: <a href="' + url + '">' + title + '</a><br>ID: ' + id;
} else if (action == google.picker.Action.CANCEL) {
document.getElementById('result').innerHTML = 'Picker canceled.';
}
}
答案 0 :(得分:2)
这应该可行:
在pickerCallback(数据)函数中:
if (data.action == google.picker.Action.PICKED) {
var fileId = data.docs[0].id;
google.script.run
.withSuccessHandler(useData) // this will call the google apps script function in your Code.gs file
.doSomething(fileId); // this is a function in your JavaScript section where you will do something with the code you got from your apps script function
}
function useData(data) {
// do something with the data
}
在Code.gs中,创建一个函数来处理选择器的输入:
function doSomething(fileId) {
// do an operation in Drive with the fileId
var file = DriveApp.getFileById(fileId);
var fileName = file.getName();
return fileName;
}
答案 1 :(得分:0)
首先,在运行此时打开chrome开发人员控制台,这样您就可以看到客户端发生的任何错误(当选择器处于活动状态时)。您还可以使用console.log在Chrome控制台中报告任何变量值。
其次,对服务器的调用是异步工作的,所以这意味着在你的代码中,你会得到你的消息&#39;脚本已经运行了,而事实上它还没有。所有这一切都发生在google.script.run要求你的服务器端功能执行。
这就是为什么你有withSuccessHandler和withFailureHandler的原因。
所以你应该做
google.script.run
.withSuccessHandler (function (response) {
document.getElementById('result').innerHTML = 'it worked'
})
.withFailureHandler (function (err) {
document.getElementById('result').innerHTML = err;
})
.justatest (fileId);
并返回服务器脚本
function justatest(fileId) {
Logger.log (fileId);
}
如果您返回并查看脚本日志文件,则应该看到fileId。