В последнее время я создал форму HTML, в которой результаты отправляются в таблицу Google. Я использовал его для аналитических целей, но это полезно даже для отслеживания результатов формы. Попробовав все виды решений и даже поиск за пределами 2 -й страницы в Google, я нашел что -то, что сработало для меня, и я подумал, что стоит поделиться.
Предварительные условия: HTML и базовые знания JavaScript.
Кредит для этого решения идет на Джейми Уилсон Кто создал и загрузил его в GitHub Анкет
Сначала создайте электронную таблицу
- Перейти к Google Sheets а также
Начните новую таблицу
сПусто
шаблон. Отказ от ответственности: не имеет значения, как вы называете файл. - В первом ряду напишите TimeStamp на первом столбце и Эл. адрес На втором столбце.
Создать скрипт приложений Google
- Нажмите на
Инструменты> Редактор скриптов…
который должен открыть новую вкладку. - Назовите скрипт
Отправить форму в Google Sheets
Или как вы хотите вспомнить, что делает сценарий. - Удалить
function myfunction () {}
Блок сCode.gs
вкладка - Вставьте следующий сценарий на его место и
Файл> Сохранить
:
var sheetName = 'Sheet1' var scriptProp = PropertiesService.getScriptProperties() function intialSetup () { var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet() scriptProp.setProperty('key', activeSpreadsheet.getId()) } function doPost (e) { var lock = LockService.getScriptLock() lock.tryLock(10000) try { var doc = SpreadsheetApp.openById(scriptProp.getProperty('key')) var sheet = doc.getSheetByName(sheetName) var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0] var nextRow = sheet.getLastRow() + 1 var newRow = headers.map(function(header) { return header === 'timestamp' ? new Date() : e.parameter[header] }) sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]) return ContentService .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow })) .setMimeType(ContentService.MimeType.JSON) } catch (e) { return ContentService .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e })) .setMimeType(ContentService.MimeType.JSON) } finally { lock.releaseLock() } }
Если вы хотите лучше понять, что делает этот скрипт, ознакомьтесь с Form-script-commented.js
Файл в репо для подробного объяснения.
Запустите функцию настройки
- Теперь перейдите к
Запустить> Fun Function> Начальная сеть
запустить эту функцию. - В
Требуется авторизация
Диалог, нажмите наОбзор разрешения
Анкет - Войдите или выберите учетную запись Google, связанную с этим проектом.
- Вы должны увидеть диалог с надписью
Привет {ваше имя}, отправьте форму в Google Sheets, хочет ...
- Затем нажмите
Разрешать
Добавить новый триггер проекта
- Нажмите на
РЕДАКТИРОВАТЬ> Триггеры текущего проекта
Анкет - В диалоговом окне щелкнуть
Триггеры не установлены. Нажмите здесь, чтобы добавить один сейчас
Анкет - В выпадении выберите
допост
- Установите поля событий на
Из электронной таблицы
иВ форме отправить
- Затем нажмите
Сохранять
Опубликовать проект как веб -приложение
- Нажмите на
Опубликовать> развернуть как веб -приложение…
Анкет - Установить
Версия проекта
кНовый
и положитьначальная версия
в поле ввода ниже. - Оставить
Выполнить приложение как:
установить вЯ (your@address.com)
Анкет - Для
Кто имеет доступ к приложению:
ВыберитеКто -нибудь, даже анонимный
Анкет - Нажмите
Развернуть
Анкет - Во всплывающем окне скопируйте
Текущее веб -приложение URL
из диалога. - И нажмите
ОК
Анкет
ВАЖНЫЙ! Если у вас есть пользовательский домен с Gmail, вы может нужно щелкнуть ОК Обновить страницу, а затем перейти к Опубликовать> развернуть как веб -приложение…
Снова, чтобы получить правильный URL -адрес веб -приложения. Это должно выглядеть как -то вроде https://script.google.com/a/yourdomain.com/macros/s/xxxx…
Анкет
Введите URL вашего веб -приложения
Откройте файл с именем index.html
Анкет В строке 7 заменить
С вашим сценарием URL:
Как видите, этот скрипт использует Fetch API , довольно новый механизм на основе обещаний для выполнения веб-запросов. Это делает запрос «сообщения» на URL -адрес вашего сценария и использует FormData передавать наши данные в виде параметров URL.
Добавление дополнительных данных формы
Чтобы забрать дополнительные данные, вам просто нужно создать новые столбцы с названиями, соответствующими именно имя
значения из входов вашей формы. Например, если вы хотите добавить входные данные имени и фамилии, вы бы дали им имя
ценности как так:
Затем вы можете создать новые заголовки с точным, чувствительным к случаям имя
ценности. Просто перейдите в таблицу и добавьте имена в первый ряд, каждый имя в другом столбце.
Связанные полифиллы
Некоторые из этих вещей еще не полностью поддерживаются браузерами или не работают на более старых. Вот несколько вариантов полифилла для лучшей поддержки.
Поскольку полифилл FormData опубликован в виде пакета узлов и должен быть скомпилирован для работы с браузерами, хороший вариант для включения их – это использование CDN Browserify под названием Wzrd.in Анкет Этот сервис компилизируется, минифирует и обслуживает последнюю версию этих сценариев для нас.
Вы захотите убедиться, что они загружаются до того, как основной сценарий обрабатывает подчинение формы. например.:
А также… Да, это все. Попробовав несколько различных методов для выполнения этого «простого» действия, это единственное, что сработало для меня – поэтому я надеюсь, что это поможет. Не стесняйтесь поделиться им/сохранять его для будущего использования и не стесняться комментировать, если у вас есть идеи, чтобы улучшить его!
Оригинал: “https://dev.to/omerlahav/submit-a-form-to-a-google-spreadsheet-1bia”