千夜一夜

人生は短い、それはまるでたった1日のように

【GAS】スプレッドシート2列からランダム出力させる【Slackbot】


以前から挑戦していたSlackbot、先日完成しました。GAS(Google Apps Script)を使ってスプレッドシート2列からランダムでデータを取り出す方法について。 

Slack拡張アプリのSlack API Testerを使って動いてます。

 

参考にしたのはこちらの記事。

SlackとGASを使ってヨーダの名言を自動返答するbot | xxbxxqxx.com

  1. A列のセルから1つを選んでB1セルに出力
  2. B1セルの内容をメッセージとして投稿

という流れを応用してみました。ランダム応答にさらにランダムで感嘆符をつけることで、応答のバリエーションを一気に増やしちゃおう、という作戦です。botをより感情豊かに。

 

コード全文はこちら。

Slackbot.double

 

肝心の「単語+感嘆符→投稿」の流れはこのへんになります。

var range = sheet.getRange("シート1!C1").setFormula('=INDIRECT("シート1!A:A" & INT(RAND()*n+1))');  

→単語をランダムで選ぶ

var range2 = sheet.getRange("シート1!D1").setFormula('=INDIRECT("シート1!B:B" & INT(RAND()*n+1))');  

 →感嘆符をランダムで選ぶ

var message =sheet.getRange("シート1!C1").getValue()+sheet.getRange("シート1!D1").getValue();

→単語と感嘆符を繋げて投稿

nの部分は、各列のデータ数を入れてください。

感嘆符の入った列を作るのはわりとすぐできたけど、2列を繋げて投稿するとこが大変だった…。("シート1!C1"+"シート1!D1")で実行してエラーたくさん出しちゃったり。

 

f:id:senyaitiya:20180709214333p:plain

エラーが出たときの画像です。アプリの発言は手動で消せないから恥ずかしい。

スプレッドシートはこんな感じです。

f:id:senyaitiya:20180709210943p:plain

感嘆符が付かない発言も入れたいので、B列の一番上は空白にしました。あといくつか空白セルを増やしてもいいかもしれない。でも最初の2回くらい感嘆符が付かない発言が偶然連続で出て、失敗したかと思って焦った。

 

ミズゴロウが鳴いたり食べ物の名前を言ったりするbot、これからも少しずつ改良していきます。シリーズ化なるか。