プロが書く美しいコードじゃない、素人の稚拙なコードだからこそ、得られるものだってきっとある…そんな思いでコードを公開しています。どうぞ生暖かく見守ってください。

【Google Apps Script】一連の動作を繰り返すープログラミングの基本のキ

[tool1]フォームをシートに書き出しChatGPTGoogle Apps Script
  • 繰り返し処理
  • 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]); // それぞれシートの新しい行に入力
}

}

では、実行してみます。

取得元のフォームはこちら

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

いい感じです✨

次はいよいよ、アイテムタイプごとに違う処理をする「分岐処理」です。

コメント

タイトルとURLをコピーしました