2016-11-08 3 views
1

Я знаю, как написать простой скрипт приложения, который (после опубликования) предоставляет простую форму (имя и сообщение), которые вытесняют значения в Google Spreadsheet.Запустите Google App Script с веб-страницы

Мой вопрос: как я могу запустить скрипт с моего сайта? Могу ли я создать html-форму и когда я отправлю форму в электронную таблицу?

Есть ли способ «создать» ссылку со значениями, которые необходимо вставить в электронную таблицу?

Где я могу найти примеры?

Благодаря

EDIT

GS КОД

var logSheetId = "[SHEETID]"; // Drive ID of log spreadsheet 

function doGet(e){ 
var nome; 
var messaggio; 

nome = e.parameter.stringaNome; 
messaggio=e.parameter.stringaMessaggio; 
scriviSpreadsheet(nome,messaggio); 
} 

function scriviSpreadsheet(nome, messaggio) { 
try { 

// Open the log and record the new file name, URL and name from form 
var ss = SpreadsheetApp.openById(logSheetId); 
var sheet = ss.getSheets()[0]; 
sheet.appendRow([nome, messaggio]); 

// Return the new file Drive URL so it can be put in the web app output 
//return file.getUrl(); 
} catch (error) { 
return error.toString(); 
} 
} 

HTML (внешний сайт)

<form id="myForm"> 
<input type="text" id="nome" name="nome" placeholder="Il tuo nome"/> 
<input type="text" id="messaggio" name="messaggio"/> 
<input type="button" value="Submit" 
    onclick="scrivi()" /> 
</form> 

<script> 
function scrivi(){ 
    var nome= document.getElementById("nome").value; 
    var messaggio = document.getElementById("messaggio").value; 

    var location = "https://script.google.com/macros/s/[MYSCRIPTID]/exec?stringaNome=" + nome + "&stringaMessaggio=" + messaggio; 
    window.location = location; 

} 

function onFailure(error) { 
    alert(error.message); 
} 
</script> 

Я знаю, что это не самый лучший код когда-либо, но это работает.

Как я могу избежать открытия любой страницы при нажатии кнопки?

+0

Вы могли бы написать форму HTML и встроить его в сайт, вы можете использовать форму Google и вставлять его с помощью фрейма или вы можете сделать сайт google и встроить GAS напрямую –

+2

Если ваша веб-страница может сделать запрос HTTPS, вы можете запустить функцию сценария приложений, которая будет запускаться с запросом GET или POST на опубликованный URL-адрес проекта Script Apps. Например, если ваша веб-страница может использовать JavaScript, вы можете сделать запрос AJAX. Если ваша веб-страница может запускать код на стороне сервера, ваш код сервера на вашем веб-сайте может сделать запрос GET или POST на URL скрипта приложений. Чтобы обрабатывать запрос GET или POST, Script Apps имеет два зарезервированных имени функции: 'doGet()' и 'doPost()' Они оба отслеживают событие запроса, сделанного для опубликованного URL. –

+0

Публикация скрипта в виде веб-приложения. Затем вы получаете ссылку, которую вы можете использовать самостоятельно, в iframe или прямо на странице сайта Google. Для сайта, отличного от Google, в вашей функции doGet (e) вы должны вызвать 'HtmlService.createTemplateFromFile ('Index'). SetXFrameOptionsMode (HtmlService.XFrameOptionsMode.ALLOWALL);' или 'HtmlService.createHtmlOutput ('Index'). SetXFrameOptionsMode (HtmlService.XFrameOptionsMode.ALLOWALL); или один из других вызовов. См. Https://developers.google.com/apps-script/reference/html/html-service и https://developers.google.com/apps-script/reference/html/x-frame-options-mode –

ответ

1

EDIT: Протестировано и работает. Не забудьте развернуть как веб-приложение, предоставить доступ к форме для публикации в сценарий и убедиться, что скрипт имеет доступ к целевому листу, выполнив сценарий вручную один раз.

form.html:

<form action="https://script.google.com/macros/s/[SCRIPT ID]/exec" method="post"> 
    Input One:<br> 
    <input type="text" name="inputOne"><br> 
    Input Two:<br> 
    <input type="text" name="inputTwo"><br> 
    Input Three:<br> 
    <input type="text" name="inputThree"><br> 
    Input Four:<br> 
    <input type="text" name="inputFour"><br> 
    Input Five:<br> 
    <input type="text" name="inputFive"><br> 
    <input type="submit" value="Submit"> 
</form> 

Code.gs:

function doPost(e) { 

    var ss = SpreadsheetApp.openById("SHEET ID"); 
    var sheet = ss.getSheetByName("Sheet1"); 
    var sheet_counters = ss.getSheetByName("Counters"); 

    var id = sheet_counters.getRange("A2").getValue()+1; 
    var timeZone = ss.getSpreadsheetTimeZone(); 
    var timestamp = Utilities.formatDate(new Date(), timeZone, "dd/MM/yyyy HH:mm:ss"); 

    sheet.appendRow([ 
    id, 
    timestamp, 
    e.parameter.inputOne, 
    e.parameter.inputTwo, 
    e.parameter.inputThree, 
    e.parameter.inputFour, 
    e.parameter.inputFive]); 

    sheet_counters.getRange("A2").setValue(id); 
} 
+0

Я пробовал ваш пример, когда я пытаюсь запустить, говорит, что не может найти функцию doGet. Я переименовал функцию «doPost» в «doGet», и когда я запустил, вы не можете прочитать «содержимое» свойства из неопределенного (строка 13). –

+0

Я обновил код. Попробуй еще раз. – h0dges

+0

теперь скрипт работает! Что, если я не хочу, чтобы страница подтверждения появилась? Я хочу, чтобы при отправке формы переадресация страницы в мой дом (или другую страницу, размещенную на моем сайте). Еще раз спасибо –

Смежные вопросы