千夜一夜

人生は短い、それはまるでたった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")で実行してエラーをたくさん出したり。人に見えるところでやると、アプリの発言は手動で消せないから恥ずかしい。

 

スプレッドシートはこんな感じです。なんのbotやねん(「ミズゴロウが喋る」bot

f:id:senyaitiya:20180709210943p:plain

感嘆符が付かないバリエーションも入れたいので、B列の一番上は空白にしています。感嘆符が時々付くように、あといくつか空白セルを増やしてもいいかもしれない。

最初の2回くらい感嘆符が付かない発言が偶然連続で出て、失敗したかと思って焦りました。これもbotあるある?