2016-11-08 101 views
1

我知道如何編寫一個簡單的應用程序腳本(一旦發佈),它提供了一個簡單的表單(名稱和消息),可以將值推送到Google Spreadsheet中。從網頁運行Google App腳本

我的問題是:如何從我的網站運行腳本?我可以建立一個HTML表單,並且當我在電子表格中提交表單寫入時?

有沒有辦法用電子表格創建必須推送的值的鏈接?

我在哪裏可以找到示例?

感謝

編輯

GS CODE

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表單並將其嵌入到網站,你可以使用谷歌的形式,並通過iframe嵌入,或您可以創建一個Google站點並直接嵌入GAS –

+2

如果您的網頁可以創建HTTPS請求,那麼您可以觸發Apps腳本功能,以通過GET或POST請求運行到發佈的Apps腳本項目的URL。例如,如果您的網頁可以使用JavaScript,那麼您可以發出AJAX請求。如果您的網頁可以運行服務器端代碼,那麼您的網站服務器端代碼可以向Apps腳本URL發出GET或POST請求。爲了處理GET或POST請求,Apps腳本有兩個保留的函數名稱:'doGet()'和'doPost()'它們都監視對發佈的URL發出的請求事件。 –

+0

將腳本作爲Web應用程序發佈。然後,您可以獲得一個鏈接,您可以單獨使用,在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

編輯:測試和工作。不要忘記部署爲web應用程序,將表單訪問權限發佈到腳本中,並通過手動運行腳本一次來確保腳本可以訪問目標表單。

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函數。我已經在「doGet」中重命名了函數「doPost」,並且當我運行時說不能從undefined(第13行)讀取屬性「contents」。 –

+0

我更新了代碼。再試一次。 – h0dges

+0

現在腳本正常工作!如果我不希望確認頁面出現,那麼怎麼辦?我希望當我提交表單時,頁面會重定向到我的家中(或我網站上託管的其他頁面)。再次感謝 –