(5分間実行していたら止める。ファイルごとの処理をここから記載する。ファイルごとの処理をここまでに記載する。ID)の配下のフォルダかチェックする。Scriptでたまに欲しくなる小ネタをまとめた。始めにフォルダ作成のダメな例ですが、普通にcreateFolderを呼び出すと、既に同じ名前のフォルダが存在していても構わず同じ名前のフォルダを生成する。そのためトリガを設定して何度も実行されるスクリプトでこれを行うと同じ名前のフォルダがどんどん増えていき使い物にならない。存在していてもフォルダを作成する。何度も実行すると、毎回同じ名前のフォルダが生成される。);対策としては既にフォルダが存在していたらそのフォルダを使用し、存在していない場合には新規に作成することにする。Foldersと複数形となっていることからもわかるように、同じ名前のフォルダが複数あった場合には複数のフォルダが見つかる。その場合どのフォルダを採用するか悩んでも仕方がないので、最初に見つかったものを採用する。);}これを関数化しておく。指定されたフォルダ取得する、フォルダがないときは新規に作成する。noCreate指定の場合はundefinedを返す。一階層のフォルダを生成するだけであれば先ほどの処理でよいが、写真を整理する場合などは年フォルダの下に月フォルダを生成したい場合がある。単純に処理を繰り返すだけだが、毎回コードを書くのが面倒なので関数化しておく。指定されたフォルダ取得する、フォルダがないときは新規に作成する。指定時はnameを取得。親フォルダが指定されなかった場合はルートフォルダを取得する。フォルダ名に配列が指定されていない場合は配列にする。noCreateが指定されていない場合はfalseにする。folder;}使い方は以下。Serviceのリファレンスに従いうだけではあるが、毎回悩むので記録しておく。);}ファイルへのデータ保存テキストの読み書きができているので、クラスを保存したい場合などはJSON化すればよい。JSON.parse(file.getBlob().getDataAsString());保存されたファイル(filename.txt)は以下。[{"id":123,"name":"Taro"},{"id":124,"name":"Jiro"}]指定期間のメールを処理するGMAILの検索はGmailApp.search(query,start,max)を使用する。この関数の戻り値はGmailThread[]となっており非常に厄介。いうと、期間を指定検索をすると期間内のメールも含むスレッドが検索されるのだが、そのスレッドには期間外のメールも含まれていることがある。今回はその期間外のメールを除外したメールのID一覧を取得する関数の紹介。いっても、期間指定して検索した結果をループで回して期間内のメールだけを抽出している。工夫していないが、いざ欲しいときにコーディングしようと思うと時間を取られるので残しておく。メールの検索結果から指定した期間のメールのIDリストを取得する。}}ちなみに使い方は以下を想定している。プロパティをファイルに保存するGoogleAppsScriptは便利だがいろいろと困ることがある、その代表格は6分制限。スクリプトの実行時間が6分を超えると途中で処理が終了してしまいます。その対応として実行経過を保存し時間駆動型のトリガーを設定して、細切れに処理をする必要がある。これについてはGoogleで検索すれば山のように情報が出てくるので割愛する。今回その途中経過を保存する方法について書いてみる。value)などを用いると非常に楽である。9217文字以上の文字列を扱おうと思うとエラーが発生してしまう。'ここに文字数が9217以上の文字列を指定、XXXXXXXXXX');}上の例では以下のようにエラーではじかれる。nn,ファイル「コード」)そこまで大きい値を扱わない場合には問題ないが、DriveAPIで複雑な検索式でsearchFilesを行った場合のContinuationTokenがこの上限を大幅に超えることがある。9216文字以下になるように分割して複数のプロパティに保存することで対処可能ではあるが、今回はプロパティをファイルに保存する方法を考えてみたので忘れないようにメモ。使い方はそのうち別記事で記載します。Serviceで保存しておく。ファイルIDが変わらない限りはプロパティファイルの名前が変更されても参照が継続する。使い勝手が良いのか、悪いのかはよくわからない。備考:一度生成したファイルを参照し続ける。ファイル名を変えても参照し続ける。プロパティファイルがない場合には新規に作成する。Scriptで処理するGMailに受信したメールを処理するスクリプトを作成した。検索を行いその結果に対して処理を行うが、一度処理したメールは再度処理しないようにしなければならない。処理をしたメールにたいし、ラベルをつけたり、既読化したり、スターをつけたりすることで対処しようとしているページが多い。ラベルや既読化はスレッド単位で検索されてしまうので問題が発生するし、既読化やスターをつける方法は複数のスクリプトで処理したいメールがある場合に対応できない。今回はメール受信日時で処理済みかどうかを判断する方法を採用した。時間駆動トリガで定期的に実行することを想定しているが、トリガを仕掛ける処理は組み込んでいないので、手動でトリガ指定する必要がある。処理量が多いと一回のスクリプト実行時間(6分)では処理しきれないこともあるため中断することも考慮に入れている。目的に合わせて青字の部分をカスタマイズして使用する。トリガ設定は行っていないので、手動で指定する必要があります。一回の検索で検索する期間5分で処理できる量を指定するのが一番良い。実施すべきジョブ(MailIDの配列)をプロパティから取得する。スクリプト開始から5分経過している場合は実行経過をプロパティに保存して処理を中断する。階層構造を一気に作成できます。カスタマイズ部分から呼び出している関数はここまで//////////////////////////////////////////////////////////////////////////////////////メールから必要な部分を抜き出してスプレッドシートに張り付ける場合のAction関数は以下のような感じで実現した。処理サンプル:以下のメールから必要な部分をシートに張り付ける。ありがとうございます。様のカードのご利用がありましたのでご連絡します。※セキュリティ保護のため、下4桁のみ表示しています。ご利用先は、加盟店からの売上情報到着前の情報となり、実際のご利用先と名称が異なる場合があります。(売上情報到着後の名称については、マイページにログインのうえ「ご利用明細の確認」メニューよりご確認ください。9:00PM以降にバリュー残高からの加算・減算が発生した場合は、翌8:00AM以降のメール送信となります。ご不明点などありましたら、JCBプリペイドカードデスクにお問い合わせください。