【余談】GmailにすでにあるメールをGASを使ってスプレッドシートに出力する

【余談】GmailにすでにあるメールをGASを使ってスプレッドシートに出力する
【余談】GmailにすでにあるメールをGASを使ってスプレッドシートに出力する
ビジネス

はじめに

今回のビジボットでは先日あげた記事の「GmailにすでにあるメールをGASを使ってスプレッドシートに出力する」について、実際のメールが多い環境で実行をしてみたところ実際の数字と異なる結果が確認できた。その原因と、解決するためのGoogleAppsScript (GAS)コードを改めて紹介できればと思います。

↓↓先日の記事は以下↓↓

スプレッドシートに出力する

GmailにすでにあるメールをGASを使ってスプレッドシートに出力する

2019年1月28日

それでは早速始めていきます!

1.原因

POINT

Gmailで検索した結果メールの数と、GoogleAppsScript (GAS)を実行して取得したはずの件数が完全に一致しないのです。
理由はデバックして確認したところ配列の値で取得できてなさそうな部分があることがわかりました。

デバック画面 - bzbot(ビジボット )
デバック画面 – bzbot(ビジボット )

デバックする前に見つけた記事も似たような状態で困っていたので、その記事を参考に処理方法を変更して読み解いてみました。

2.処理の追加

POINT

今回追加した処理は大きく2つです。

  1. forの入れ子【forを入れ子にして取得できなかった値を取得する】
  2. 改行処理【setValue処理(行に取得した値をセット)が完了したら次の行にずれる】

1つずつ解説していきます。

forの入れ子

前回作成したコードのピックアップした部分はこちら
※見やすくするためにLogger.log()は外してます

GASコード

そして今回作成したコードのピックアップした部分がこちら
このあと詳しく記載していきます。

GASコード

まず、変数myMessages①より小さいときは中に記載された処理を実行します。
変数myMessageLen②に変数myMessages①で取得した値で取れていない値を取得します。

※以下例でいうと、0[3]の3の部分。ここには要素がそれぞれ3つ入っているため、これらも取得の対象となります

配列要素数 - bzbot(ビジボット )
配列要素数 – bzbot(ビジボット )

そのため、以下処理を追加しています。
処理にLogger.log(myMessageLen)を追加している為、roopされて実行される度にログにmyMessageLenに入っている値が表示されます。
このfor処理はそのmyMessageLenの数をそれぞれ繰り返すという処理です。
その為、3回、1回 ….. 72回、1回というように処理をしています。

GASコード

以下がLogger.log(myMessageLen)の取得した回数です。
意図する動きになってました。

ログ出力結果 - bzbot(ビジボット )
ログ出力結果 – bzbot(ビジボット )

改行処理

次は改行処理です。当初作成した処理は処理して繰り上がり、処理して繰り上がり…となってましたが、今回追加したプログラムで改行を追加しない場合は2回目のforを実行中は同じ値が上書きされてしまいます。

簡単に説明するとmyMessageLenが3だった場合、1回目はスプレッドシートの1行目の1列目に「AAA」という値が入ります。しかし、本来2回目の処理で2行目の1列目に新しい値「BBB」が入って欲しいですが、改行処理を入れないと「AAA」に「BBB」が上書きされてしまいます。

その為以下を追加してます。

GASコード

さらに「sheet.getRange(rowCnt, 1)」で行の指定をrowCntにすることで毎に繰り上がっていきます。
1回目の処理は(1,1)。2回目の処理は(2,1)。3回目の処理は(3,1)。。。という形で行を改行していきます。

今回はこれで実行できたことは確認できたので終わりとします。
他にも色々作成してみたいと思います!ありがとうございました!