Шаг 1. Создайте форму
Обычная рабочая процедура - создайте форму либо с помощью скрипта, либо с помощью пользовательского интерфейса форм. Захватите идентификатор формы. Например, из URL-адреса в редакторе:
https://docs.google.com/forms/d/1-AWccGNgdJ7_5Isjer5K816UKNSaUPSlvlkY3dGJ1UQ/edit
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Прикрепите электронную таблицу, чтобы записывать ответы. (Мы не собираемся здесь больше ничего делать.)
Шаг 2: клиентский скрипт
В доступной пользователю электронной таблице создайте связанный с контейнером скрипт (чтобы он имел доступ к пользовательскому интерфейсу электронной таблицы). Следующий сценарий создает настраиваемое меню с выбором, запускающим форму во всплывающем окне пользовательского интерфейса.
/**
* 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);
};
Демо
Вот что вы видите, когда выбираете «Запустить форму» в «Пользовательском меню». Одно небольшое раздражение - когда форма отправлена, пользователь попадает в другое окно или вкладку браузера. В электронной таблице пользовательский интерфейс остается открытым, и его необходимо закрыть вручную. Эта проблема исчезла с использованием изолированной программной среды IFRAME!
![Снимок экрана - встроенная форма](https://i.stack.imgur.com/75xB2.png)
РЕДАКТИРОВАТЬ: недавно были внесены изменения в настройки по умолчанию для песочницы ECMA, которые требуют, чтобы режим песочницы был явно установлен на ИСХОДНЫЙ, чтобы этот метод работал. Код обновлен.
Снова ИЗМЕНИТЬ: новый режим песочницы IFRAME сохраняет все возможности формы внутри диалогового окна.
person
Mogsdad
schedule
17.06.2013