- 繰り返し処理
- for構文(JavaScript)
前回までで、Googleformの項目を取り込んでスプレッドシートに書き込む道筋が出来上がりました。
前回のコード
function myFunction() {
// フォームを開く
const form = FormApp.openByUrl(フォームのURL);
// URLは'https://docs.google.com/fo******/edit'のように''で囲んで入力
//フォームの要素を配列で取得
const items = form.getItems();
const itemparts = items[0]; //itemという配列の0番目の要素をitempartsとして取り出す。
const itemType = itemparts.getType(); //取得したitempartsのタイプを確認してitemTypeに保管
const itemText = itemparts.getTitle();//取得したitempartsの質問内容を確認してitemTextに保管
//スプレッドシートを開く。
const spsheet = SpreadsheetApp.openByUrl(シートのURL);
// URLは'https://docs.google.com/fo******/edit'のように''で囲んで入力
const sheet = spsheet.getActiveSheet();
//処理を加えるシートとして、ファイルを開いて最初に表示される(アクティブな)シートを設定
sheet.clear(); //シートの内容をクリア
//シートに行を追加し、formタイトル入力
sheet.appendRow(['フォームタイトル', form.getTitle()]);
// 項目タイトル行を作成
sheet.appendRow(['アイテムタイプ', '質問内容']);
sheet.appendRow([itemType, itemText]); // フォームの内容を入力
}
ただし、このコードでは、取得した項目のうち、最初の項目だけしか読み込むことができません。
ここ↓の部分ですね。
//フォームの要素を配列で取得 const items = form.getItems(); const itemparts = items[0]; //itemという配列の0番目の要素をitempartsとして取り出す。 const itemType = itemparts.getType(); //取得したitempartsのタイプを確認してitemTypeに保管 const itemText = itemparts.getTitle();//取得したitempartsの質問内容を確認してitemTextに保管
この[0]の部分を1,2,3,・・・・と項目数の数だけ数字を変えて繰り返す必要があります。これが、いわゆる「繰り返し処理」というものになります。
JavaScriptの繰り返し処理について詳しくはChatGPTにでも聞いてみてください。
ここでは繰り返しのうちの一つである、「for」を使います。forを使うと、指定の回数だけカッコ内の処理を繰り返し行うことができます。
つまり、取得したItemの数だけ繰り返してね、という命令を書けば良いと。
では、Itemの数をどうやって知ればよいか?
getなんたらでitem数が返ってくるようなメソッドでもあればよいのですが、残念ながら無いようです。
というより、必要無いのです。その代わりに、getItems()で取り込んだ配列の大きさを調べればよいのですから。

Google Apps Scriptで、配列の大きさを調べるメソッドは?

Google Apps Scriptで配列の大きさ(要素数)を調べるには、配列の組み込みメソッドであるlengthを使用します。以下に具体的な使い方を示します。
function checkArraySize() {
var myArray = [1, 2, 3, 4, 5];
var arraySize = myArray.length;
Logger.log("配列の大きさは: " + arraySize);
}
この例では、myArrayという配列の要素数をlengthメソッドを用いて調べ、その結果をarraySize変数に格納しています。そして、Logger.logを使って結果をログに表示しています。
上記のコードをGoogle Apps Scriptエディター内で実行すると、ログに”配列の大きさは: 5″と表示されるでしょう。配列の要素数を調べる際には、lengthメソッドを使って簡単に取得できます。
相変わらず鮮やか。コードサンプルまで提示してくれるので使いやすい!要するに、items[]の大きさを調べるには、items.lengthとする。
「〇回繰り返す」という命令を書きたかったら「items.length回繰り返す」とすればよいと。
ではそれを踏まえて、必要箇所をItemの個数だけ繰り返すようにコードを書き換えてみます。
//フォームの要素を配列で取得
const items = form.getItems();
for (let i = 0; i < items.length; i++) {
//Item数をiと置き換えて、iを0から順番に項目の数だけ1ずつ増やす
const itemparts = items[i]; //itemという配列のi番目の要素をitempartsとして取り出す。
const itemType = itemparts.getType(); //取得したitempartsのタイプを確認してitemTypeに保管
const itemText = itemparts.getTitle();//取得したitempartsの質問内容を確認してitemTextに保管
sheet.appendRow([itemType, itemText]); // それぞれシートの新しい行に入力
}
取得したものをすぐにシートに書き込むため、forを始める前にスプレッドシートの準備を整えられるよう、順番を変更します。
function myFunction() {
// フォームを開く
const form = FormApp.openByUrl(フォームのURL);
// URLは'https://docs.google.com/fo******/edit'のように''で囲んで入力
//フォームの要素を配列で取得
const items = form.getItems();
//スプレッドシートを開く。
const spsheet = SpreadsheetApp.openByUrl(シートのURL);
// URLは'https://docs.google.com/fo******/edit'のように''で囲んで入力
const sheet = spsheet.getActiveSheet();
//処理を加えるシートとして、ファイルを開いて最初に表示される(アクティブな)シートを設定
sheet.clear(); //シートの内容をクリア
//シートに行を追加し、formタイトル入力
sheet.appendRow(['フォームタイトル', form.getTitle()]);
// 項目タイトル行を作成
sheet.appendRow(['アイテムタイプ', '質問内容']);
for (let i = 0; i < items.length; i++) {
//Item数をiと置き換えて、iを0から順番に項目の数だけ1ずつ増やす
const itemparts = items[i]; //itemという配列のi番目の要素をitempartsとして取り出す。
const itemType = itemparts.getType(); //取得したitempartsのタイプを確認してitemTypeに保管
const itemText = itemparts.getTitle();//取得したitempartsの質問内容を確認してitemTextに保管
sheet.appendRow([itemType, itemText]); // それぞれシートの新しい行に入力
}
}
では、実行してみます。
取得元のフォームはこちら

そして、スプレッドシートに入力された内容がこちら

いい感じです✨
次はいよいよ、アイテムタイプごとに違う処理をする「分岐処理」です。
コメント