我有一个电子表格,我只希望用户通过运行脚本进行修改。该脚本是一个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对象?感谢。
答案 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);
这样,用户可以以特定格式输入信息,而无需对工作表进行编辑。