読者です 読者をやめる 読者になる 読者になる

うまくスキップができない

理系大学院生の備忘録だったり,頭の中身

google apps scriptとSlack 連携でのエラー色々

研究室での連絡ツールがSlackで
掃除当番や雑務管理をgoogleスプレッドシートで管理して
GAS (google apps script)で
必要に応じてSlackにポストするってことをしようとしたときに
起こった色々なエラーをまとめる
起こったエラー一覧

  1. 文字が無効です
  2. 関数内のpostMessageが実行されない
  3. onEdit関数内でSlackのpostMessageが実行されない
  • 番外編

1. 文字が無効です

google apps scriptのスクリプトエディタではパッと見
丸括弧( )の全角半角の区別が付きづらく (ほとんどわからない)
全角で括弧を入力していたせいでエラーがずっと出てた
意外と見落としがちだった


2. 関数内のpostMessageが実行されない

これはpostMessageより前で

SlackApp.create(slack["token"]);

をしていないことが原因だった
そりゃpostされないわけだ
これが発生したのが編集時のトリガーで実行される関数だったから
デバッグが出来ず無駄に時間を使ってしまった...
こういう問題であまり時間をかけず解決できる様になりたい


3. onEdit関数内でSlackのpostMessageが実行されない

これがマジで一番厄介だったし,本質的に解決していない
何が起こったかというと
編集を読み込まないmyfunction()関数ではpostMessageされるのに(以下ソース)

function myFunction() {
  var slackApp = SlackApp.create(slack["token"]);
  var Message = slackApp.postMessage(
      slack["ChannelId"],
      "ok"
      ,{username : slack["userName"],icon_emoji: slack["iconEmoji"]});
}

編集をトリガーに実行されるonEdit(e)関数ではpostMessageが実行されない(以下ソース)

function onEdit(e){
   var range = e.range;//書き込みがあったセルのオブジェクト
   var slackApp = SlackApp.create(slack["token"]);
   var Message = slackApp.postMessage(
      slack["ChannelId"],
      "ok"
      ,{username : slack["userName"],icon_emoji: slack["iconEmoji"]});

というもの
myfunction()では実行されるから
token,チャンネル,userName, 絵文字が間違っているわけではない
myfunction()のコードをそのままコピーしてきてるから半角全角問題もない
しまいにはBrowser.msgBoxで直前まで実行されることは確認できてて
いよいよ原因がわからない...
ほとんど最初から書き直すレベルで修正したけど結局うまく実行されない
結果的にスプレッドシートを作り直して(生成し直し)
一から全部やりなおしました...(泣)
新しいスプレッドシートではなんの問題もなくスムーズに実行されたから
もっと早くからやり直しておけばよかった

もし原因がわかる人がいたら教えて欲しいです(切実)




※番外編
onEdit(e)関数内で

  //イベント関連の変数
  var ROW = range.getRow();
  var COLUMN = range.getColumn();
  var PCID = sheet.getRange(ROW,1).getValue();
  var STATUS = sheet.getRange(ROW,2).getValue();
  var PERSON = sheet.getRange(ROW,3).getValue();
  var START = Utilities.formatDate(sheet.getRange(ROW,4).getValue(), 'JST', 'MM月dd日');
  var END = Utilities.formatDate(sheet.getRange(ROW,5).getValue(), 'JST', 'MM月dd日');

みたいに宣言したとき
それぞれのセルに文字(ここではPCID,STATUS等)が入ってないと
その以下は実行されないみたい(もしかしたら自分だけかも)


google apps script めっちゃ便利なので
今後も色々理解して書いていきたい