Tim*_*Tim 4 google-sheets google-apps-script google-forms
由于正在进行的开发版本控制,以及实现用户权限解决方案的看似无法克服的问题,我需要捕获链接到未向用户公开的工作表的表单数据.相反,我想使用自定义菜单从单独的电子表格应用程序启动表单.尽管彻底的谷歌搜索,以及令人着名的'FormApp.openById'方法,我找不到实现这一目标的方法.
我知道我在这里偏离轨道; 谁能指点我回去的路?
Mog*_*dad 12
正常的操作过程 - 通过脚本或使用Forms UI创建表单.捕获表单的ID.例如,在编辑器中的URL:
https://docs.google.com/forms/d/1-AWccGNgdJ7_5Isjer5K816UKNSaUPSlvlkY3dGJ1UQ/edit
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
附加电子表格以捕获回复.(我们不会在这里做更多的事情.)
在用户可访问的电子表格中,创建一个容器绑定的脚本(以便它可以访问电子表格UI).以下脚本生成一个自定义菜单,其中包含一个在Ui弹出窗口中启动表单的选项.
/**
* Uses the Forms service to get a handle on an existing form, then retrieve its published URL.
* Uses the UrlFetch Service to get a copy of the HTML for the form.
* Uses the HtmlService to embed the form's HTML in a Spreadsheet UI.
* ... which is finally shown using Spreadsheet.show().
*/
function launchForm() {
var formID = '1-AWccGNgdJ7_5Isjer5K816UKNSaUPSlvlkY3dGJ1UQ';
var form = FormApp.openById(formID);
var formUrl = form.getPublishedUrl();
var response = UrlFetchApp.fetch(formUrl);
var formHtml = response.getContentText();
var htmlApp = HtmlService
.createHtmlOutput(formHtml)
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle('Ta Daaa!')
.setWidth(500)
.setHeight(450);
SpreadsheetApp.getActiveSpreadsheet().show(htmlApp);
}
function onOpen() {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var entries = [{
name : "Launch Form",
functionName : "launchForm"
}];
sheet.addMenu("Custom Menu", entries);
};
Run Code Online (Sandbox Code Playgroud)
这是您从"自定义菜单"中选择"启动表单"时看到的内容.但是有一点小烦恼 - 当提交表单时,用户将被带到另一个浏览器窗口或选项卡.在电子表格中,UI保持打开状态,需要手动关闭.IFRAME沙盒问题已经消失了!
编辑:最近引入了ECMA沙箱默认值的更改,这要求将沙箱模式显式设置为NATIVE以使此技术起作用.代码已更新.
再次编辑:较新的IFRAME沙箱模式将整个表单体验保留在对话框中.
归档时间: |
|
查看次数: |
10762 次 |
最近记录: |