Google Picker - 将文件ID返回到我的Google脚本

时间:2014-04-15 03:53:41

标签: google-apps-script google-apps google-picker

我有一个相当基本的电子表格,它使用一些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.';
    }
  }

2 个答案:

答案 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。