episode3 GASの「範囲を指定してまとめて入力(二次元配列は団地だ!)」(Hunter×Hunterで覚えるGoogle Apps Script)

この記事を読むと、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)で、二次元配列をスプレッドシート出力することが可能です。
この記事で取り扱うのは、4行2列の配列です。
シートに出力する関数、消去する関数の2つを作って、それぞれボタンに割り当て(登録)します。
また、シートに入力されている範囲をgetDataRangeで配列として扱へます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

前回(episode2)の復習をします。

・セルA1に「ハンターハンター」と入力する関数と消去する関数を作り、それぞれをボタンに登録する。

//アクティブなスプレッドシートを選択するグローバル(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//入力とログ出力をする関数
function mySet(){

  //セル入力
  let hh=ss.getRange(1,1).setValue('ハンターハンター');

  //ログ出力
  console.log(hh);

}

//消去する関数
function myClear(){
  ss.getRange(1,1).clear();

}

ここから、いよいよキャラクターの名前を登録していきます。

登録するデータは、

「「ゴン」、「強化系」」、
「キルア」、「変化系」」、
「クラピカ」、「具現化系」、
「レオリオ」、「放出系」」

です。

スプレッドシートは行列の二次元配列なので二次元配列を使って入力します。
二次元配列とか配列って難しそうですが、イメージは「団地(マンションでも)」です。

1階・・・ゴンのデータ(101号室に「ゴンの名前」 102号室に「ゴンの念系統」)
2階・・・キルアのデータ(201号室に「キルアの名前」 202号室に「キルアの念系統」)

というふうに「団地」と捉えると、操作しやすくなるのかも知れません。

以上を踏まえてスクリプトを書いていきます。
まずは、キャラクターの名前と念の系統を入力する関数であるmySetから解説します。

キャラクター名と念系統の二次元配列をこのように作成します。

//二次元配列hhにキャラクターの名前と念系統を格納
  let hh=[
    ['ゴン','強化系'],
    ['キルア','変化系'],
    ['クラピカ','具現化系'],
    ['レオリオ','放出系'],
    ];

次に、上記の二次元配列は4行2列なので、スプレッドシートのA1を起点に4行2列分のデータを確保するプログラムを書いていきます。

  //hhを格納するために、スプレッドシートの4行2列を確保して出力する
  ss.getRange(1,1,hh.length,hh[0].length).setValues(hh);

lengthで4行、length[0]で2列分のセル範囲を確保しています。

ログ出力で配列hhが二次元配列として格納されたことが確認できました。

次に、データを消去に関するmyClear関数を作成します。

//入力範囲を消去する関数
function myClear(){

  hh=ss.getDataRange();
  hh.clear();

}

シートオブジェクト.getDataRange()

この書式でシート上のデータを配列として取得できました。
その下のclearメソッドで入力範囲を削除できます。

ここまでのコード全体を記述します。

//アクティブなスプレッドシートを選択するグローバル(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//キャラクターの名前と念の系統を入力する関数
function mySet(){

  //二次元配列hhにキャラクターの名前と念系統を格納
  let hh=[
    ['ゴン','強化系'],
    ['キルア','変化系'],
    ['クラピカ','具現化系'],
    ['レオリオ','放出系'],
    ];

  //二次元配列hhにデータが格納されたことをログ出力で確認
  console.log(hh);

  //hhを格納するために、スプレッドシートの4行2列を確保して出力する
  ss.getRange(1,1,hh.length,hh[0].length).setValues(hh);

}

//入力範囲を消去する関数
function myClear(){

  hh=ss.getDataRange();
  hh.clear();

}

下記のシートのボタンにそれぞれのスクリプトを割り当てて実行します。
ボタンを選択すると、右上の「・・・」からスプリクトを割り当てられます。

これで、「入力」「消去」ボタンも機能出来ました。

ご精読ありがとうございました。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

←episode2               episode4→

←GAS自作サンプルへ戻る

episode2 GASの「文字入力と消去をボタン操作で行う」(Hunter×Hunterで覚えるGoogle Apps Script)

この記事を読むと、アニメHUNTER×HUNTER(ハンターハンター)を通してGAS(Google Apps Script)の基礎の基礎が学べます。この記事ではスプレッドシートにボタンを作成してスクリプトを登録して、ボタンを押すと各関数の処理が実行される流れを学ぶことが出来ます。
また、スプレッドシートのボタンの複製は悩む所なので、お役に立てるかも知れません。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

GASは環境設定不要ですぐ始められますが、

まずは前回(episode1)の復習をします。

・セルA1に「ハンターハンター」と入力する

function hh1no1(){
  
  //アクティブなスプレッドシートにアクセスしている
  const ss=SpreadsheetApp.getActiveSheet();

  //ここで入力処理を行なっている。
  ss.getRange(1,1).setValue('ハンターハンター');

}

・セルA1の内容を実行ログに出力

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //ここを追加してセルA1の内容をログに表示する
  console.log(ss.getRange(1,1).getValue());
}

・セルA1の内容を消去する

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //消去する処理
  console.log(ss.getRange(1,1).clear());
}

以上を関数に分けます。

いきなり「関数」なんて出てくると難しそうですが、

入力と表示」を「ヤマダさんのお家」、
文字の消去」を「サトウさんのお家」、
両家(両方)で使うスプレッドシートからアクティブシートを選択する共通の処理を「ゴミ捨て場」というイメージを持って読み進めて下さい。

ゴミ捨て場→「共通:アクティブなシートを選択」・・・グローバル関数(共通領域)


ヤマダ家→「入出力:セルA1に「ハンターハンター」と入力して実行ログに表示する」・・・mySet関数

サトウ家→「消去:セルA1に入力された内容を消去する」・・・myClear関数

ヤマダさんは、ヤマダさんの家と共通のゴミ捨て場は使えるけれど、サトウさんの家のものは使えない、
サトウの立場ではその逆が言える、これが関数のイメージです。

//アクティブなスプレッドシートを選択するグローバル(共通の処理)
const ss=SpreadsheetApp.getActiveSheet();

//入力とログ出力をする関数
function mySet(){

  //セル入力
  let hh=ss.getRange(1,1).setValue('ハンターハンター');

  //ログ出力
  console.log(hh);

}

//消去する関数
function myClear(){
  ss.getRange(1,1).clear();

}

このようにスクリプトを作成しました。

スプレッドシートに「入力」と「消去」というボタンを2つ作って、そのボタンを右クリックし、右上角の「てんてん」をクリックして、「スクリプトを割りあて」を押します。そのやり方について、図を用いて詳しく解説致します。

「入力ボタン」を作ってから、それを元に「消去ボタン」を作ります。
ボタンの作り方は、「挿入」→「図形描画」から作れます。


ここで任意の図形を選択します。


図形を選択すると文字が入力可能です。


この文字を中央にするには、図形を選択した状態で下の図の赤枠「・・・」をクリックします。

下の図の「配置」から中央揃えを選びます。

あとは、色やサイズを調整して、右上の緑色の「保存して終了」をクリックします。

この後に、この「入力ボタン」を元に「消去ボタン」をコピーして作成します。

まず、さっき作った「入力ボタン」を右クリックして、の右上角の「てんてん」をクリックし、「編集」をクリックして、編集画面で「入力ボタン」をコピーします。

右上の緑色の「保存して終了」を押して、面倒ですがまたスプレッドシートの「挿入」→「図形描画」から開き、貼り付けてボタンの体裁を整えて、右上の緑の「保存して終了」を押すと複製出来ます。

位置を調整します。

「入力」を実行します。

消去を押すと消せます。

ご精読ありがとうございました。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。



←episode1               episode3→

←GAS自作サンプルへ戻る

episode1 GASの「セル操作で入力と消去」(ハンター×ハンターで覚えるGoogle Apps Script)

GAS(Google Apps Script)をアニメ、ハンターハンターを通して入門の入門から学べる記事を掲載することになりました。
この記事を読めば、今日初めてGASを使う方がセルA1に好きな文字を入れることができ、消去することも可能になります。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

GASは環境設定不要ですぐ始められますが、

・Googleアカウント
・「マイドライブ」から「新規」でスプレッドシートを追加

・スプレッドシートの「ツール」→スクリプトエディタ

この3点の準備は必要です。

準備が整ったところで。

まず最初に、スプレッドシートのセルA1に「ハンターハンター」と入力するスクリプトを書いてみます。(「こんにちは」でも、好きな言葉でも、何かお好きな文字を入れてみましょう。去年だったら「鬼滅の刃」、今年は「呪術廻戦」とかかな。)

getRange(‘セル番地’)でセルを指定して、setValue(‘入力する値’)で指定したセルに値を入力します。

初期状態のまっさらなスプレッドシートです。

function hh1no1(){
  
  //アクティブなスプレッドシートにアクセスしている
  const ss=SpreadsheetApp.getActiveSheet();

  //ここで入力処理を行なっている。
  ss.getRange(1,1).setValue('ハンターハンター');

}

こんな感じに書けました。
さて、
[Ctrl]+[S]で保存します。

Macの方は、「Command」と読み替えて下さい。

[Ctrl]+[R]で実行しようとすると・・・。

「承認が必要です」とメッセージが出るので、

「権限を確認」で、自分のアカウントを選ぶと、

なぬ!!

大丈夫。

「詳細」をクリックして。

「安全ではないページ」に移動して。

パソコンが爆発とか無いので、大丈夫です(=^x^=)

「許可」を押します。

実行ログ

で完了されたことが分かり、

で、入力されていました。

次に、セルA1に入力された「ハンターハンター」の文字を、実行ログに出力してみます。

//ここを追加してセルA1の内容を表示する
console.log(ss.getRange(1,1).getValue());

を追加します。

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //ここを追加してセルA1の内容をログに表示する
  console.log(ss.getRange(1,1).getValue());
}

最後に、これを消します。

setValue(‘入力する値’)のところを、clear()と書き換えます。

//ここを変更してセルA1の内容を消去する
console.log(ss.getRange(1,1).clear());

function hh1no1(){
  const ss=SpreadsheetApp.getActiveSheet();
  ss.getRange(1,1).setValue('ハンターハンター');

  //消去する処理
  console.log(ss.getRange(1,1).clear());
}

実行すると・・・

無事に消去できました。

今回は、セルをA1を(1,1)と記述しましたが、(‘A1’)と書いても同様に処理できます。
また、セルB1は(1,2)で、セルA2は(2,1)です。
後に範囲を取得する場合に備えて今回は(1,1)と記述しました。


ご精読ありがとにゃん(=^x^=)

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

←GAS自作サンプルへ戻る     episode2→

GASで「ねこあつめ」を「Chatwork」に送る(=^x^=)mm「ねこあつめシリーズ:その11」

この記事では、GAS(Google Apps Script)で今までスプレッドシートに作ってきた「ねこあつめ」の情報を実際にChatworkに送信する流れを掲載しております。
お世話になった記事は、【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
です。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

前回の復習をいたします。

GASでChatworkにメッセージを送信するコードと、実際に送信されたメッセージです。

function testMessage(){
  const cw=ChatWorkClient.factory({token:'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'});
  const body='テストメッセージにゃん(=^x^=)mm。。。!';
  cw.sendMessageToMyChat(body);  
}

今回の内容に入る前に、ねこあつめ画像で癒されます(=^x^=)

↑「サビガー(左)」と「ヘキサにゃん(右)」

今回は、今まで作ってきたねこあつめのスプレッドシートを使って、ねこちゃんの名前(A列)をChatworkに送るコードを掲載します。

今まで作ってきた、ねこあつめのコードです。

function myFunction() {
  const ss = SpreadsheetApp.getActiveSheet();
  let lastRow = ss.getLastRow();//最終行を取得

  for (let i = 2; i <= lastRow; i++) {

    //もしもD列の「済」が空白だったらA列の「なまえ」を出力してD列を「済」にする
    if (!ss.getRange(i, 4).getValue()) {
      console.log(ss.getRange(i, 1).getValue());
      ss.getRange(i, 4).setValue('済');

      //もしも最終行以上になったらセル範囲を消去する
      if (i >= lastRow) {
        ss.getRange(2, 4, lastRow - 1).clearContent();
      }
      break;
    }
  }
}

この9行目をご覧下さい。

console.log(ss.getRange(i, 1).getValue());

ここを変更して、Chatworkにメッセージを送れるように変更します。
今回作るプログラムの流れは、

「ねこあつめのメッセージを取得するプログラム(メイン)」から、「Chatworkに送信する関数」に「【送れ】と指示出しする」

という流れになります。

「ねこあつめ」のメッセージを「body」という変数に格納し、Chatworkに送信する関数「sendMessage」に「body」を送り込むイメージです。

メインから関数sendMessageに対して「body」を引数にして、「sendMessage(body)」として呼び出して、「これを送ってくれ」というメッセージを送り込みます。

関数のイメージはなかなか掴みいにくいので、以下のように置き換えてみました。

例えば、私がアマゾンで、DVD(上記のbodyをDVDに置き換えると、トレース(追跡)しやすくなるかもっ!)を買ったとします。

プログラム実行開始・・・私がアマゾンに「DVDをくれ!」とポチる

メイン関数が呼ばれる・・・アマゾンが注文を受ける

チャットワークに送信する関数が呼ばれる・・・アマゾンから宅配業者へとDVDが渡る

チャットワークに「ねこあつめ」が出力される・・・宅配業者から、DVDが私の手元に届く

ざっくりですが、これがプログラムをトレースして行った時の流れです。
以上を踏まえてプログラムを下記のように修正しました。
コメントを参考に、頭の中でトレースしてイメージを掴みました。

トークンIDの実際のものは’XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’の所に入れます。

//メインの関数でAmazonにDVDの注文をする
function myFunction() {
  const ss = SpreadsheetApp.getActiveSheet();
  let lastRow = ss.getLastRow();//最終行を取得

  for (let i = 2; i <= lastRow; i++) {

    //もしもD列の「済」が空白だったらA列の「なまえ」を出力してD列を「済」にする
    if (!ss.getRange(i, 4).getValue()) {

      //AmazonがDVDの注文を受け取る
      const body=ss.getRange(i, 1).getValue();

      //ここでAmazonが宅配業者みたいなsendMessage関数にDVDの配達を依頼する
      sendMessage(body);
      ss.getRange(i, 4).setValue('済');

      //もしも最終行以上になったらセル範囲を消去する
      if (i >= lastRow) {
        ss.getRange(2, 4, lastRow - 1).clearContent();
      }
      break;
    }
  }
}

//宅配業者のようなsendMessage関数がAmazonからDVDを受け取って、配達を行う
function sendMessage(body){
  const cw=ChatWorkClient.factory({token:'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'});
  cw.sendMessageToMyChat(body);
}

では早速、「ねこあつめ」の名前をChatworkに送ってみます。

実行すると、Chatworkにメッセージ「ヘキサにゃん」が送られました。

スプレッドシートは「ヘキサにゃん」のところに、処理済みの「済」が入っています。

他の猫ちゃんたちも同様にChatworkに送ってみます。

三匹目までの猫ちゃんを送ると、このようになり、最後のとらきちまで送ると、

クリアになって、再び最初の「ヘキサにゃん」から送れます。
これでは、「Chatwork」ではなく、「Catwork」ですね(=^x^=)mm

ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃん             次行くにゃん→

<ねこフォーム6>ねこあつめフォームに「チェックボックス」を追加する

この記事では、GAS(Google Apps Script)を使って、ねこあつめフォームに「チェックボックス」を追加します。
お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームにチェックボックス形式の質問を追加する方法

です。

まず、前回の復習をします。
このようなフォームを作って、ラジオボタンを追加しました。

前回のコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

  //メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

  //←ラジオボタンを加える
  form.addMultipleChoiceItem()
    .setTitle('種類は何系?')
    .setChoiceValues(['みけ','とら'])
    .setRequired(true);

}

今回の内容に入る前に、ねこあつめ画像で癒されます(=^x^=)

前回のラジオボタンで作った選択肢は、「みけ」か「とら」かだけでしたが、上の画像の「ねこまたさん」など、「みけ」でも「とら」でもないコもいるので、「その他」のチェックボックスも作ってみます。

こちらのコードを追加します。

//←チェックボックスを追加する
  form.addCheckboxItem()
    .setTitle('種類は何系?(チェックボックス)')
    .setChoiceValues(['みけ','とら']) 
    .showOtherOption(true)//その他のチェックボックスを作っている
    .setRequired(true); 

実行してプレビューで確認した画面です。

ここまでのコードをまとめます。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

  //メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

  //ラジオボタンを加える
  form.addMultipleChoiceItem()
    .setTitle('種類は何系?(ラジオボタン)')
    .setChoiceValues(['みけ','とら'])
    .setRequired(true);

  //←チェックボックスを追加する
  form.addCheckboxItem()
    .setTitle('種類は何系?(チェックボックス)')
    .setChoiceValues(['みけ','とら']) 
    .showOtherOption(true)//その他のチェックボックスを作っている
    .setRequired(true); 

}

ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃっ!          次行くにゃん(=^x^=)→

<ねこフォーム5>ねこあつめフォームに「ラジオボタン」を追加する

この記事では、GAS(Google Apps Script)を使って、ねこあつめフォームに「ラジオボタン」を追加します。お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームにラジオボタンの質問を追加する方法

です。

まずは前回の復習をします。
メールアドレスが正しいかどうか検証するコードを書きました。

このようなフォームの原型を作成し、1番下に「めあど」のテキストアイテムが入力必須で追加されました。

プレビュー画面にすると、

このようになり、最後の「めあど」の所に架空のアドレスを入力します。

このメアドから「@」を削除して送信を押すと、

この様に、有効なアドレスではないと検証されました。

前回のコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

  //←メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

}

今回の内容に入る前にねこあつめ画像で癒されます。

今回は「ラジオボタン」を作って行きます。
ラジオボタンは「MultipleChoiceItem」で、タイトルと選択項目や必須かどうかを下記のコードで加えます。

//←ラジオボタンを加える
  form.addMultipleChoiceItem()
    .setTitle('種類は何系?')
    .setChoiceValues(['みけ','とら'])
    .setRequired(true);

ラジオボタンの設定には、タイトルと選択項目が必要です。
コードを見た所、選択項目は配列(リスト)になっています。
この記述でのラジオボタンは、配列(リスト)になっている所の「みけ」か「とら」かの2択を選択出来るようなっています。

実行してプレビュー画面を開きました。

ここまでのコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

  //メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

  //←ラジオボタンを加える
  form.addMultipleChoiceItem()
    .setTitle('種類は何系?')
    .setChoiceValues(['みけ','とら'])
    .setRequired(true);

}

ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃっ!          次行くにゃん(=^x^=)→

<ねこフォーム4>ねこあつめフォームに「メールアドレス」を追加する

この記事では、GAS(Google Apps Script)を使って、 Googleフォームに入力したメールアドレスが、「@」が含まれていてメールアドレスとして正しいのかを判定する、入力テキストアイテムを作成して行きます。
お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームにメールアドレスの入力欄とバリデーションを追加する方法

です。

前回の復習ですが、

このようなフォームの原型を作成して、

この「目」のマークを押して、

フォームのプレビューを表示させました。
お名前は、入力必須の*がついています。

前回のコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //←テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

}

今回の内容に入る前に、ねこあつめの画像で癒されます。

さて今回は、「おなまえ」と「あそんだグッズ」に加えて、「めあど」のテキストアイテムを追加します。

Mailアドレスの入力項目を追加するには、「それがメールであるか」を検証する必要が出てくるのが、「おなまえ」や「あそんだグッズ」よりも若干複雑になります。

追加するコードは下記の2行です。

//←メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

このコードで必要なことは、最初の行で、createTextValidation()で、「検証する」という動作を作ります。また、requireTextIsEmail()で、それがE-mailのアドレスであるのか判定します。build()では「E-mailのアドレスであるのか検証するオブジェクトを」作成します。

次の行では、今までの「おなまえ」や「あそんだグッズ」と同じようにテキストアイテムを設定して、1行目で作ったオブジェクトの検証をします。

この2行の理解を深めるIT用語について掲載しました。
ITパスポート基本情報技術者試験でお世話になった「「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典」のリンクを貼りましたので、不安な用語がございましたら、チェックして見て下さい。

オブジェクト

メソッド

バリデーション

ビルド

では、先ほどの2行を追加したコードで、動作を確認します。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

  //←メールアドレスのテキストアイテムを加える
  const validationEmail=FormApp.createTextValidation().requireTextIsEmail().build();
  form.addTextItem().setTitle('めあど').setRequired(true).setValidation(validationEmail);

}

フォームの原型です。

また、「目のマーク」からフォームのプレビューを開きます。

「めあど」の部分を詳しく見てみます。
架空のアドレス「neko22@cat.jp」と入力しました。

このままで送信を押せますが、「@」を取って送信ボタンを押してみます。

「@」を入れて送信した所、無事に送れました。
ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃっ!           次行くにゃん(=^x^=)→

<ねこフォーム3>GASで作成したフォームに「ねこあつめ」の「おなまえ」と「あそんだグッズ」を追加する

この記事では、GAS(Google Apps Script)を使って、フォームを作成して行きます。
お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームに記述式の質問を追加する方法

です。

前回のおさらいをします。

このフォームを、

ドライブの指定されたフォルダ「ねこねこフォーム作成練習」に保存するコードと実行結果です。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //←ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);
}

今回のは、下記のねこあつめの「なまえ(きっどさん)」と、「あそんだグッズ」をフォームで入力する、テキストアイテムを追加して行きます。

「おなまえ」は入力必須、「グッズ」は任意にします。

「add」は色々なプログラミング言語で「追加」の意味で使われていたのを学びました。

前回のコードに追加するコードは下記2行です。

//テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

簡単にコードの説明を書きますと、addTextItem()でテキスト入力が出来る所を作れて、setTitleで「おなまえ」など、入力する所に名前を付けることが出来ます。
また、setRequired(true)を追記すると、入力必須になります。

上記のコードを追記した、今回のコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);

  //←テキストアイテムを追加する
  form.addTextItem().setTitle('おなまえ').setRequired(true);//trueにすることで、入力必須にしている。
  form.addTextItem().setTitle('あそんだグッズ');

}

このコードを実行すると、まずこの様なフォームの雛形が出来ます。

このプレビューを見てみます。
右上の所の「目のマーク」を押します。

「おなまえ」のところ、「*」付いていますね。


フォームが作成されたので、下記のように入力して送信します。

送信して、先ほどの画面に戻ると、

このように、回答が1件集まったことの通知が来ています。
この画面の右側上を見ると、

スプレッドシートのマークが表示されますので、押してみます。

新しいスプレッドシートを選択して、「作成」ボタンを押します。

先ほどのデータがスプレッドシートに蓄積されました。
ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃっ!          次行くにゃん(=^x^=)→

<ねこフォーム2>GASで作成したフォームを指定のフォルダに格納する

この記事では、GAS(Google Apps Script)を使って、フォームを作って行きます。
今回は、作成したフォームを指定のフォルダに格納するプロパティストアについて見て行きます。お世話になった記事は、いつも隣にITのお仕事さんの、

GASで作成したGoogleフォームを指定のフォルダに移動する方法

です。

まず、前回の復習をします。

このようなスプレッドシートを元に、

このようにフォームを作成しました。
そのコードがこちらです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //フォームの説明を作成
  form.setDescription(formDescription);
}

今回の内容に入る前に、ねこあつめ画像で癒されます。

では、今回の内容に入ります。

今ではフォームを作成すると、自動でマイドライブの配下に置かれてしまいましたが、今回から、フォームを作成すると、自動的に指定のフォルダに格納できる処理を下記の手順で行います。

1.Googleフォルダ内に格納するフォルダを用意

2.フォルダIDを調べる

3.フォルダIDをキーと紐付けるコード書いて実行する

4.フォーム作成のコードを実行する

では、順に見ていきます。

1.Googleフォルダ内に格納するフォルダを用意
新規作成または、勉強に使えそうなフォルダを用意します。
「ねこねこフォーム作成練習」と言うフォルダを作りました。

2.フォルダIDを調べる
上の画像のフォルダのアドレスで、モザイクかかっているところがIDです。
このIDを次の工程でキーと紐付けます

3.フォルダIDをキーと紐付けるコード書いて実行する
フォーム作成の前に行います。
GASで新たにファイルを作成して、紐づけをするスクリプトのコードを書きます。
32桁の「XXXXXX…XXXXX」のところにフォルダIDを貼り付けて実行します。

//プロパティストアにフォルダIDを格納する
function setScriptProperty(){
  PropertiesService.getScriptProperties().setProperty('FOLDER_ID','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
}

このように何もログに表示されませんが、FOLDER_IDにX X X X X X XXXXXXXXXXXXXXXXXXXXXXXXXXXXが格納されたことを、下記のプログラムを実行することで確認出来ます。

//プロパティストアにフォルダIDが格納されたことを確認する
function getScriptProperty(){
  const folderid=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');
  console.log(folderid);
}

実行結果です。これで無事にプロパティストアにフォルダIDが格納されたことを確認出来ました。実際のIDはモザイクにしています。

4.フォーム作成のコードを実行する
以上の準備が整ったところで下記のコードを実行します。

その前にもう一度前回のコードを表示します。
この、13行目の下に下記4行を追記します。

前回のコード

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //フォームの説明を作成
  form.setDescription(formDescription);
}

追記するコード

//←ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

今回の追記したコードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //←ここでプロパティストアに格納したFOLDER_IDを使って、指定のフォルダにフォームを作成する
  const id=PropertiesService.getScriptProperties().getProperty('FOLDER_ID');//idにFOLDER_IDを格納する
  const formFile=DriveApp.getFileById(form.getId());//作成したフォームのIDをformFileに格納する
  DriveApp.getFolderById(id).addFile(formFile);//指定のフォルダにフォームを格納する
  DriveApp.getRootFolder().removeFile(formFile);//マイドライブに作成されたフォームを削除する

  //フォームの説明を作成
  form.setDescription(formDescription);
}

実行結果です。

無事に格納されているので、これで安心して勉強を進められます。

ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

←前に戻るにゃっ!          次行くにゃん(=^x^=)→

<ねこフォーム1>GASで「ねこあつめ親睦会」のフォームを作ってみる

この記事では、GAS(Google Apps Script)を使って、最も簡単な方法でフォームを作って行きます。お世話になった記事は、いつも隣にITのお仕事さんの、

GASでGoogleフォームを作成する最も簡単なスクリプト

です。

そもそもGoogleでフォームが作れるってこと、今日今さっき知ったのですが、大丈夫でしょうか・・・。
不安もありつつ上の記事を見ながら作ってみます。

スプレッドシートのメニューバー「拡張機能」から「Apps Script」を選んで、「ねこあつめのフォームだにゃ(=^x^=)mm」というフォームを作っていきます。

とてもシンプルなコードです。

function myFunction() {
  FormApp.create('ねこあつめのフォームだにゃ(=^x^=)mm');
}

[Command]+[S]で保存して、[Command]+[R]で実行してみます。
(Windowsの方は[control]で。)

実行後、Googleドライブに切り替えてみます。

これをクリックして、

お〜〜〜!!
出来てた!!

では次に、フォームに説明文を加えます。

コードです。

function myFunction() {
  const form=FormApp.create('ねこあつめのフォームだにゃ(=^x^=)mm');
  form.setDescription('説明すると、ねこあつめ大好きなお友達の集まりだにゃ');
}

実行結果です。

うん。良い感じ♪♪♪♪

では、スプレッドシートに入力した内容を元に、フォームを作成していきます。
このように作成し、シート名は「イベント概要」にします。

セルA1を[0][0]とすると、タイトル「ねこあつめ親睦会」は[0][1]、「集まれ!!・・・」以降の説明文は[1][1]になります。

コードです。

function myFunction() {

  //SpreadsheetAppから現在のスプレッドシートにアクセス
  const ss=SpreadsheetApp.getActiveSpreadsheet();

  //シート名「イベント概要」のデータを配列として取得する
  const values=ss.getSheetByName('イベント概要').getDataRange().getValues();
  const formTitle=values[0][1];//タイトル
  const formDescription=values[1][1];//概要
  
  //フォームを作成
  const form=FormApp.create(formTitle);

  //フォームの説明を作成
  form.setDescription(formDescription);
}

実行結果です。

ほのぼのって感じ(=^x^=)

ご精読ありがとうございました。

■参考文献の紹介■
初めてGASを学ぶ方向け。
スプレッドシートの基本的な使い方からGASのベースとなるJavaScriptの基礎文法、GASでの初歩的なプログラミングを学べます。

GASに少し慣れて来たら、基礎固めとリファレンスとしてこの本を通してじっくり学べます。

サイトマップはこちらから

GASサンプル集に戻る
メインメニューに戻る
これからプログラミングを始める方へ
基本情報技術者へ
自己紹介

次行くにゃん(=^x^=)→