2016-11-08 111 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

现在脚本正常工作!如果我不希望确认页面出现,那么怎么办?我希望当我提交表单时,页面会重定向到我的家中(或我网站上托管的其他页面)。再次感谢 –