2017-10-19 113 views
0

我有一個webapp表單,我正在尋找一種方法將表單的值推送到Google電子表格中。webapp表單值到電子表格

我的當前的嘗試是將名稱分配給每個窗體輸入(A1,A2,A3 ...),那麼嘗試表單值迭代進入一個這樣的數組:

Code.gs

function doGet(e) { 
return HtmlService 
.createTemplateFromFile('Index') 
.evaluate() 
.setSandboxMode(HtmlService.SandboxMode.NATIVE) 
} 

function writeForm(form) { 

var ss = 
SpreadsheetApp.openById('1bKrGjBV*****'); 
var sheet = ss.getSheets()[0]; 
var data = ss.getDataRange().getValues(); 
var input = ['']; 
var ndata = form 

for(var j=0;j<data.length;j++){ 
var value = form.a+j 
input.push(value) 
} 
for(var k=0;k<data.length;k++){ 
sheet.getRange(k+1,4).setValue(ndata[k]); 
} 
var range = sheet.getRange(1, 5); 
} 


function getData(){ 

return SpreadsheetApp 
.openById('1bKrGjBV*****') 
.getSheets()[0] 
.getDataRange() 
.getValues(); 
} 

的Index.html

<body> 
<center><h1>Produce Inventory Form </h1></center> 
<style> 
table,th,td{border:1px solid black;} 
</style> 
<? var data = getData(); ?> 
<form id="invform"> 
<input type = "submit" value="Submit" onclick 
="google.script.run.writeForm(this.parentNode)"> 
<table align="center"> 
<tr><th>Code</th><th>Name</th><th>ChName</th><th>On Hand</th></tr> 
<? for(var i=0;i<data.length;i++){ ?> 
<tr> 
<th><?= data[i][0] ?></th> 
<th><?= data[i][1] ?></th> 
<th><?= data[i][2] ?></th> 
<th><input type = "text" style="width:40px" min="0" maxlength="3" name=a<? 
=i ?>> 
</tr> 
<? } ?> 
</table> 
</body> 

使用這種方法,我進入的問題是

var value = form.a+j 

不會做我希望的,即將一個變量分配給form.a1,form.a2,form.a3,...然後將其推入數組。

我很確定有更好的方法,但我還沒有找到解決方案。爲這些混亂的代碼道歉,但我專注於獲得結果。

回答

1

下面的修改如何?

修改點:

  1. 有關的index.html,</form>丟失。
  2. form.a+j,您可以使用form["a" + j]檢索值。
  3. ndata是JSON,如{a1: "value", a2: "value"}。所以當ndata被導入到單元格時,它變得不確定。
  4. 將多個值導入到單元格時,使用setValues()時導入效率會變高。

當這些反映到腳本中時,修改的腳本如下所示。輸入到表格的值將被導入到電子表格的「D1:D」中。

修改後的腳本:

Code.gs

function doGet(e) { 
    return HtmlService 
    .createTemplateFromFile('Index') 
    .evaluate() 
    .setSandboxMode(HtmlService.SandboxMode.NATIVE) 
} 

function writeForm(form) { 
    var ss = SpreadsheetApp.openById('1bKrGjBV*****'); 
    var sheet = ss.getSheets()[0]; 
    var data = ss.getDataRange().getValues(); 
    var input = []; // Modified 
    // var ndata = form 
    for(var j=0;j<data.length;j++){ 
    var value = form["a" + j]; // Modified 
    input.push([value]) // Modified 
    } 
    sheet.getRange(1, 4, input.length, input[0].length).setValues(input); // Added 
    // for(var k=0;k<data.length;k++) { 
    // sheet.getRange(k+1,4).setValue(ndata[k]); 
    // } 
    // var range = sheet.getRange(1, 5); 
} 

function getData(){ 
    return SpreadsheetApp 
    .openById('1bKrGjBV*****') 
    .getSheets()[0] 
    .getDataRange() 
    .getValues(); 
} 

的Index.html

<body> 
    <center><h1>Produce Inventory Form </h1></center> 
    <style> 
    table,th,td{border:1px solid black;} 
    </style> 
    <? var data = getData(); ?> 
    <form id="invform"> 
    <input type = "submit" value="Submit" onclick="google.script.run.writeForm(this.parentNode)"> 
    <table align="center"> 
     <tr><th>Code</th><th>Name</th><th>ChName</th><th>On Hand</th></tr> 
     <? for(var i=0;i<data.length;i++){ ?> 
     <tr> 
     <th><?= data[i][0] ?></th> 
     <th><?= data[i][1] ?></th> 
     <th><?= data[i][2] ?></th> 
     <th><input type = "text" style="width:40px" min="0" maxlength="3" name=a<?= i ?>> 
     </tr> 
     <? } ?> 
    </table> 
    </form> <!-- Added --> 
</body> 

如果我誤解你的問題,我很抱歉。

+0

謝謝你的解釋。我能夠正確推送您的修改後的代碼的值。因爲我只有一列數據需要推送,所以我必須更改爲setValue。我也改變(輸入)到(輸入[j]),所以它不只是推動第一個值。我想我現在更瞭解如何使用html和java。 –

+0

@Sean W感謝您提供更多信息。 – Tanaike

相關問題