質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

11019閲覧

格納した配列が空白の場合は処理を実行しないようにしたい(GAS)

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

1クリップ

投稿2021/12/31 05:01

前提・実現したいこと

配列が空白の場合、Slackへ通知しないようにしたいです。

現状は空白の場合でも処理するようにしているのですが、nullだと対応できないようなので困っております。
※一部のコードは削除して記載しています。

該当のソースコード

GAS

1// シートを取得し、progressValに格納 2var Sheet = spreadsheet.getSheetByName("シート名"); 3var progressVal = Sheet.getRange(1,1,Sheet.getLastRow(),Sheet.getLastColumn()).getValues(); 4 5//1行ごとに処理 6for(i=0; i<progressVal.length; i++){ 7 //各情報を取得 8 date = new Date(progressVal[i][0]); 9 code = progressVal[i][1]; 10 Status = progressVal[i][2]; 11 Submission = progressVal[i][10]; 12 13 //処理対象かをで確認する(セルが 1=対象・0=対象外) 14 if (Submission == "1" ) { 15 //処理対象の場合は各情報を格納する 16 dateArray.push([Utilities.formatDate(date,'Asia/Tokyo','yyyy/MM/dd'),code,Status]); 17 } else { 18 //デバック用 19 Logger.log((i+0) + "行目は処理対象外"); 20 } 21} 22 23// Slack通知用 24if (dateArray[1] == null) { 25 // 空白のため処理は必要ない。自分宛にその内容のメールを送信する。 26 MailApp.sendEmail(toAddress,subject,main); 27} else { 28 // Slackのチャンネル宛に必要事項を記載し投稿する。 29 UrlFetchApp.fetch(slackURL, slackOptions); 30}

自身で対応できていない事

dateArray.push([Utilities.formatDate(date,'Asia/Tokyo','yyyy/MM/dd'),code,Status]);

上記で配列に格納した情報が空白(処理対象外のみだった場合)に、SlackにslackOptions(main)で指定した定型文だけ送られてしまうため
dateArray[1]が空白の場合はSlackに送らないようにしたいですが出来ず困っています。

▼空白状態のイメージ(処理対象があった場合は、線の間にセルから取得した情報が記載されます。)

================================================

================================================

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

今のコードでも、通知すべきデータが 0 行のときは、通知されないはずなので、他の部分や元のデータに想定外のところがあるのかもしれないです。
可能な限り、シート(の構成)と他のコード部分も共有していただきたいです。


コードの全体像が見えてないですが、おそらく

var dateArray = [];

みたいなのがあって、かつ K 列(Submission) が全て 0 だと通知したくない、ということですよね。
とりあえずは、こういう感じじゃないかと思います。

javascript

1// Slack通知用 2if (dateArray.length < 1) { 3 // 空白のため処理は必要ない。自分宛にその内容のメールを送信する。 4 MailApp.sendEmail(toAddress,subject,main); 5} else { 6 // Slackのチャンネル宛に必要事項を記載し投稿する。 7 UrlFetchApp.fetch(slackURL, slackOptions); 8}

修正すべきポイントとしては

  • dateArray[1] と 1 を判定していますが、配列は 0 indexed なので、1 を見ると、Submission が 1 つだけの(通知すべき行が 1 行しかない)ときにも通知が抑制されます。
  • dateArray[0] == null でも動きますが、javascript で == を使うと危険なので、=== にすべきですし、=== にするなら dateArray[0] === undefined にしないと誤判定します。配列なので、長さが 0 である、を判定するのが適切だと思います。
  • ただ dateArray[1] == null でも dateArray に何も入っていないときは通知されないと考えられますので、他のところに何らかの問題があって通知がされているのではないかと思います。(そもそも 1/0 を入れる列を取り違えている(K列を見るはずではない)など、別の要素がありそうです)

投稿2021/12/31 15:46

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/31 22:19

dateArray[1] === undefined に修正した所、正常に作動しました! 年末年始の貴重なお時間でご回答いただきありがとうございます。 大変助かりました。
guest

0

dateArray[1] == null!dateArray[1]にするといいと思います。

GAS

1function test(text, cond) 2{ 3 if (!text) { 4 console.log(cond); 5 } 6} 7 8function myFunction() { 9 test(null, 'null'); 10 test('', '空文字列'); 11 test(' ', '空白文字'); 12}

結果:
null
空文字列

もし空白文字も真にしたいなら

GAS

1 if (!text || text.trim() == '') {

とするしかないかな。

結果:
null
空文字列
空白文字

投稿2021/12/31 05:15

itagagaki

総合スコア8402

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2022/01/01 10:40

低評価には理由を書きなさい
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問