Google Apps脚本 - 处理来自UrlFetchApp.fetch()的结果

时间:2014-08-13 17:33:14

标签: google-apps-script

我有一个电子表格,我只希望用户通过运行脚本进行修改。该脚本是一个UiApp,它有一些预定义的输入字段和文本框,结果将提交到电子表格中。因为我只想从此应用程序修改文档,所以我必须将电子表格的权限设置为“可以评论”。但是,在执行此操作时,用户无法运行脚本(因为脚本编辑了页面,并且他们没有页面的编辑权限)。所以我假设我需要创建一个Web应用程序。

网络应用程序将是独立的,并将作为我(所有者)运行,以便对应用程序的调用将允许将提交的数据写入电子表格。我的网络应用程序看起来像这样:

function doGet() {
   var app = UiApp.createApplication();
   // UiApp elements are added here
   return app;
 }

...当直接从浏览器访问网址时,工作正常。但是,我希望应用程序能够从电子表格触发器中打开电子表格。我在想这样的事情:

var app = UrlFetchApp.fetch(url);
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.show(app);

......但这不起作用。我得到的错误是:“无效的参数:userInterface(第12行,文件”Web App“)。”第12行是“ss.show(app)”。我希望从UrlFetch返回app对象,但我现在知道返回了一个HTTPResponse。

如何将此响应转换为UiApp对象?感谢。

1 个答案:

答案 0 :(得分:1)

我想出的解决方案是在电子表格上打开UiApp(从触发器开始),让用户选择下拉菜单并填写文本框。单击提交按钮后,处理函数将获取所有参数并创建有效负载。然后将此有效负载传递给doPost(e)独立Web应用程序。因为我通过了ssid,所以Web应用程序能够找到电子表格/工作表/范围并以某种方式写入/格式化数据。这是我的代码:

var payload = {
   "ssid" : ssid,
   "sheetName" : sheetName,
   "row" : row,
   "col" : col,
   "method" : method,
   "strategy" : strategy,
   "summary" : summary,
};

var options = {
   "method" : "post",
   "payload" : payload
};

UrlFetchApp.fetch(url, options);

这样,用户可以以特定格式输入信息,而无需对工作表进行编辑。