В последнее время я создал форму 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”