前提・実現したいこと
Googleフォームが3つあり、回答の集計先としてスプレッドシートがA, B, Cの3つあります(1行目はヘッダー)。
タイムスタンプ | 質問1 | 質問2 | 質問3 | 質問4 | 質問5 | … |
---|---|---|---|---|---|---|
2018/05/19 19:30:00 | 回答1a,回答1b(チェックボックスで選択回答) | 回答者の名前 | 回答3(短文) | 回答4(短文) | 回答5(短文) | … |
… | … | … | … | … | … | … |
質問の数はフォームによって異なりますが、最初の5問は共通の質問です。
いま、Google Apps Scriptを使い、
ステップ1. 集計先となっているスプレッドシートの内容を配列として取得(スプレッドシートA→配列i, B→配列ii, C→配列iii)
ステップ2. スプレッドシートDに、配列i→シートa, 配列ii→シートb, 配列iii→シートc にそれぞれ書き込む
ステップ3. スプレッドシートDのシートdの1行目には予め質問番号などを書いておき、2行目以降に、シートa, b, cの内容を1行目のヘッダーを除いてコピー・統合
そして、シートdを見れば、フォーム3つへの回答が全て見られるようにしようとしています。
添付のコードでは、ステップ1と2までは処理できているようで、シートa, b, cには、配列として所得した元のスプレッドシートの内容が書き込まれています。
しかし、ステップ3で、以下の「無効な範囲です」というエラーが出てしまいます。
どのようにコードを修正すればよいのでしょうか。
質問文がわかりにくく、申し訳ありません。お力を貸して頂ければ幸いです。
発生している問題・エラーメッセージ
6 は無効な範囲です。12 にする必要があります。(行 33、ファイル「コード」)
該当のソースコード
1 2function form_response_consolidation() { 3 4//スプレッドシートA, B, Cの内容を配列として取得、スプレッドシートDのシートa, b, cに書き込む 5 var ss = SpreadsheetApp.openById("スプレッドシートDのID"); 6 7 var Form1 = SpreadsheetApp.openById("スプレッドシートAのID").getSheets()[0]; 8 var Form1data = Form1.getDataRange().getValues(); 9 var Form1dest = ss.getSheetByName("スプレッドシートD・シートa"); 10 Form1dest.clear(); 11 Form1dest.getRange(1, 1, Form1data.length, Form1data[0].length).setValues(Form1data); 12 13 var Form2 = SpreadsheetApp.openById("スプレッドシートBのID").getSheets()[0]; 14 var Form2data = Form2.getDataRange().getValues(); 15 var Form2dest = ss.getSheetByName("スプレッドシートD・シートb"); 16 Form2dest.clear(); 17 Form2dest.getRange(1, 1, Form2data.length, Form2data[0].length).setValues(Form2data); 18 19 var Form3 = SpreadsheetApp.openById("スプレッドシートCのID").getSheets()[0]; 20 var Form3data = Form3.getDataRange().getValues(); 21 var Form3dest = ss.getSheetByName("スプレッドシートD・シートc"); 22 Form3dest.clear(); 23 Form3dest.getRange(1, 1, Form3data.length, Form3data[0].length).setValues(Form3data); 24 25 26// スプレッドシートD・シートdの2行目以降に、シートa, b, cの内容を1行目のヘッダーを除いてコピー 27 Form1data.splice(0,1); 28 Form2data.splice(0,1); 29 Form3data.splice(0,1); 30 var arrData = Form1data.concat(Form2data, Form3data) 31 32 var copyTo = SpreadsheetApp.openById("スプレッドシートDのID").getSheetByName("シートd"); 33 copyTo.clear(); 34 copyTo.getRange(2, 1, arrData.length, arrData[0].length).setValues(arrData); //エラー発生箇所 35 36}
試してみたこと(解決にはつながらず)
arrData[0].length
の代わりに、とりあえず12
を設定
→相変わらず6 は無効な範囲です。12 にする必要があります。(行 33、ファイル「コード」)
6の倍は12、ということでarrData[0].length
をarrData[0].length*2
としてみる
→12 は無効な範囲です。24 にする必要があります。(行 33、ファイル「コード」)
var arrData = Form1data.concat(Form2data, Form3data) Logger.log(arrData[0].length)``` var copyTo = SpreadsheetApp.openById("スプレッドシートDのID").getSheetByName("シートd");
→ログ:[18-05-19 20:08:53:960 JST] 12.0
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/20 07:32 編集