GASの出力方法

最近、ではないですが、GASを使って何ヶ月かたつので、そろそろ知識をまとめておこうかなと思い立ったので、体系的にまとめていこうかなと思っています。
というわけで今回は出力から。
最初の出力といえば、やっぱり、もちろん? Hello, World! ですね。

そういえば、いつも私は業務のときにはWindowsを使うんですが、プライベートだとMacを使うのです。しかし、GASだとどちらでも使えるんですね〜。
というわけで、ここからの説明は基本Macを使って説明します。

Hello, Worldを出力する準備



1.まずはスプシ(=スプレッドシート。いわゆるExcelファイルみたいなもんです)をひらいて、スプレッドシートのツールバーの「拡張機能(下の図だとExtensions)」から「App Script(英語でも同じ)」を選択します。そうすると、新しいウィンドウが開きます。


2.画面の左上に「無題のプロジェクト(下だとUntitled Project))」のタイトルと、画面の左真ん中にすでに「コード.gs(下だとCode.gs)」が選択されており、画面には、myFunction() というのが出てきます。ちなみにこれが関数と呼ばれるやつです。


3.ここまで見て、多分想像はついていると思いますが、myFunction()の中にやりたいことを書きます。では、ここの中で、Hello, Worldを出力させましょう。

出力方法いろいろ


ブラウザで出力


まずはブラウザで出力。まあこういう用途ではあまり使わないですね。
実行して、完了したときとかエラーがあったときなどにメッセージを出したい、という用途に使います。

function myFunction(){
  Browser.msgBox('Hello,World');
}

さて、上のコードの説明ですが、
Browserはそのままブラウザというオブジェクト、msgBoxはMessageBoxの略で、この場合はポップアップメッセージを表示させるというメソッド(操作)を指します。ブラウザがポップアップメッセージを表示させる、と覚えればよいでしょう。

書いたら、保存してください。多分間違えやすいポイントかなと思うのですが、スプシとちがって、スクリプトは自動保存されません!
コードのすぐ上にあるフロッピーディスクアイコンをクリックすると保存されます。
(フロッピーディスクアイコンといって今の若者はわかるのでしょうか。。。。)


スクリプトを最初に実行するとき(最初の一回だけです)

保存して、隣の「実行(英語だとRun)」を押すと、最初の1回だけ、下のようなポップアップ(下は英語ですが、日本語が出ます!)が出て、承認と許可を求められるので、「権限を確認(下だと、Review permissions)」をクリック。


下のような画面になったら、自分のGoogleアカウントをクリック。(画面の下の方に出ます)



さらに違う画面(下画像。下は英語版)になり、「許可(Allow)」を求められるので、ここでも許可をクリック。



すると、晴れて、スプシに戻り、「Hello,World!」のマドが出てきます!
やったね! ちなみにこれはMac版です。Windows板だと四角い窓だった気がします。


実行ログへ出力

これは開発者用かなと思うのですが、画面下にある「実行ログ(英語だとExecution log)」に出力させることもできます。このままだと意味はないのですが、たとえば、Hello,Worldの部分を変数にして、変数の中身がどうなっているかの確認、などに使われます。上で使ったコードで言うと、Browser.msgBox の部分をLogger.logに入れ替えるだけです。

myFunction(){
  Logger.log('Hello,World');
}

さて、コードの説明ですが、LoggerはLogを吐き出すもので、logはログを出力するというもので、Loggerがログを吐き出すとみれば、理解できるでしょう。

スプシへ出力

さて、いよいよスプシへの出力です。これまでのはウォーミングアップで、これからが本番、と言っても良いと思います。スプシへ記入させる、というのはどんな仕事でも必要です。これはその基本中の基本です!

ではちょっとやってみましょう。

まずはコードから。
今開いているスプシの今表示されている画面のA1セルにHello,Worldを記述する、というものです。
これが一番簡単な記述ですね。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSheet()
  sheet.getRange('A1').setValue('Hello World!');
}

コードの説明ですが、一気に難しくなってきました。
まず、const ●●(この場合はsheetが)定数を表します。今後上書きする予定のないものに使います。たいてい、スプシやシート名などが定数として候補になりますね。私も定数としてはこれを指定することが多いです。

次に、イコール。この場合は、等しい、ではなく、「代入」を意味しています。
次に、SpreadsheetApp。これはスプシ自体を示すオブジェクトです。
さて、その次はgetActiveSheet()ですが、これは現在表示されてるシートをゲットするというやつです。
今開いているスプシは1つだけ、表示されてるのも1つだけです。

ここまでをまとめると、sheetという定数に、スプシがゲットした現在表示されているシートを代入した、ということになりますね。すなわち、sheetが現在表示されているシートを示すものとなったわけです。

さて、次に、getRange(‘A1’)。これはセルA1をゲットしたんですね。
そして次にsetValue(‘Hello World!’) これはHello,World!を値としてセットしたんですね。

ここまでをまとめると、sheetがセルA1をゲットして、それにHello,Worldをセットしたということになります。
というわけで実行すると。。。

出てきました! Hello,World!


ただですね、今は開いているスプシが1つだけ、しかもシートも1つだけなので、この記述で大丈夫なのですが、スプシが2つ以上、シートも2つ以上だと、ちょっと工夫が必要になります。
まず、対象のスプシを表すIDをURLから取得します。
今開いているスプシのURLは下記になるのですが、〜の部分がIDになります。
https://docs.google.com/spreadsheets/d/〜
これをコピペしておきましょう。
次に、対象となるシート名もコピペします。(今回のシート名は「テスト」とします。さっきのシート名を「テスト」にしておいてください)
次に下記のように記述して、実行します。

function myFunction() {
  const spreadsheet_id = ""; // ""の中にIDを入力します
  const GasSheet = SpreadsheetApp.openById(spreadsheet_id);
  const sht_test = GasSheet.getSheetByName("テスト");
  sht_test.getRange('A2').setValue('Hello World!');
}

コードの説明ですが、
さっきもやりました、定数がいくつかできていますね。
2行目から4行目までは、スプシのIdと、GasSheet(スプシ)、sht_test(テストというシート)を定数にしている、という処理です。

openByIdは、スプシのIDによってそのスプシを開くというやつです。すでに開かれている場合もありますが。。。どちらにせよ、スプシの取得ができるのでここでGasSheetに代入されています。

getSheetByName(“テスト”)は、●●というシート名のシートをゲットするというやつですね。ここでゲットしたシートを定数に代入しています。



A2セルに出てきましたね!
ということで、特定のスプシの特定のシートに入力させることも可能になりました。

次回はもっといろいろやっていきますね!