2017-10-19 5 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 
012です

私は、form.a1、form.a2、form.a3 ...に変数を代入して、それを配列にプッシュすることを望んでいました。

私は確かに良い方法があると確信していますが、まだ解決策を見つける必要があります。面倒なコードをお詫びしますが、結果を得ることに集中しました。

答えて

1

次の変更についてはどうですか?

修正ポイント:index.HTMLを

  1. </form>がありません。
  2. form.a+jについては、form["a" + j]を使用して値を取得できます。
  3. ndataは、{a1: "value", a2: "value"}のようなJSONです。したがって、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

ありがとうございます。変更したコードで値を正しくプッシュできました。プッシュするデータの列が1つしかないので、setValueに変更する必要がありました。私は(入力)を(入力[j])に変更したので、最初の値を押すだけではありませんでした。私は今、htmlとjavaで作業する方法についてもう少し理解していると思います。 –

+0

@Sean W詳細をお知らせいただきありがとうございます。 – Tanaike

関連する問題