2017-04-11 8 views
0

私は、ユーザーがイベントに登録したい日付を収集する登録フォームを持っています。チェックボックスを使用すると、複数の日付を選択して、formObjectの配列に追加することができます。 Googleのシートに値を書き込むには、日付の配列の長さをチェックしてからループを行い、個々の行がスプレッドシートに追加されるようにします。フォームからの配列への値の挿入

classキーを強制的に強制的に詰め込むことは、1つのクラスであっても常にです。クラスが1つしか選択されていない場合、lengthプロパティは文字列の長さであり、9行または10行のデータを1文字で記述します。

フォーム

<form id="classSignup" onsubmit="handleFormSubmit(this)"> 
    <label for="first">First Name</label> 
    <input id="first" name="first" type="text" /> 
    <label for="last">Last Name</label> 
    <input id="last" name="last" type="text" /> 
    <input type='checkbox' name='class' value='date1'>Date 1</input> 
    <input type='checkbox' name='class' value='date2'>Date 2</input> 
    <input type="submit" value="Register" /> 
</form> 

formObject

{last=lastName, first=firstName, class=[dateArray]} 

recordDataの以上

function recordData(formObject) { 
    try { 
    var ss = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key")); 
    var sheet = ss.getSheetByName("allRegs"); 
    var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0]; 
    var nextRow = sheet.getLastRow()+1; 
    var rows = [ ]; 

    // check the formObject structure 
    Logger.log(formObject); 

    // Open the class array 
    for(var i=0; i<formObject.class.length; i++) { 

     // set the date with the current item 
     var date = formObject.class[i]; 
     Logger.log(date); 

     var row = [new Date(), formObject[headers[1]], formObject[headers[2]], formObject[headers[3]], formObject[headers[4]], formObject.class[i]] 

     rows.push(row); 
    } // close the rows loop 

    // write the rows array to the spreadsheet 
} 

、場合とdate2は、選択されている配列が返され、すべてが通常通り動作します:formObject

単一の日付が選択されている
{ first=firstName, last=lastName, class=[date1, date2] } 

は、何の配列、単なる文字列はありません。

{ first=firstName, last=lastName, class=date1 } 

どのようにすることができます私は、配列にプッシュされるように選択されたクラスを強制しますか?

+0

「formObject」にはどのようなコードが入りますか?なぜ、 'class'を配列として渡すだけではないのですか(' class = [date1] ')? – billyonecan

+0

'formObject'はGoogle Apps Script関数で構築されています。私は、クラスとしてフォームを配列として返そうとしましたが、配列ではなく文字列として扱われます。 – Brian

+0

あなたの 'for'ループの前に' typeof formObject.class'をテストすることができます。文字列の場合は、文字列 – billyonecan

答えて

0

あなたは、ループ内でそれにプッシュあなたのループの外クラスの配列を作成し、アレイ

0

にそれを強制的にclass[]classを変更する必要があります。 次に、あなたのフォームに与えられた "行"に1つの "行"があるので、 "行"オブジェクトを作成します。

注フォームはここでは1つのフォームであるため、「行」配列は完全に理解していません。

function recordData(formObject) { 
    try { 
    var ss = SpreadsheetApp.openById(SCRIPT_PROP.getProperty("key")); 
    var sheet = ss.getSheetByName("allRegs"); 
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; 
    var nextRow = sheet.getLastRow() + 1; 
    var rows = []; 
    var classes = []; 
    for (var i = 0; i < formObject.class.length; i++) { 
     classes.push[formObject.class[i]]; 
    } 
    // set the date with the current item 
    // was not used... var date = formObject.class[i]; 
    // Logger.log(date); 
    var row = [new Date(), formObject[headers[1]], formObject[headers[2]], formObject[headers[3]], formObject[headers[4]], classes]; 
    rows.push(row);// seems to be only one? 
    } 
    // whatever here. 
) 
+0

私は十分にはっきりしていないかもしれません。 1つのチェックボックスでは 'class'に' length'の配列ではなく 'class'に文字列として追加されます。複数の日付がうまく動作するので、' rows'配列があります。 – Brian

関連する問題