こんにちは!ウィスキー好きの会計士です。
今回は前回の続きになります。
早速ですが、前回記載したGASのプログラムについて解説したいと思います。
GASの記述に当たってはまず「function」と記載したうえでプログラムの名前を付けます。
そのあとに下記のように()をつけ記述内容を{}でくくる必要があります。
今回は「function fetchFile(){ }」としています。
varと記載したものはわかりやすく言うと数学で出てくる「Y= aX + b」の式のYに当たるもののイメージで、varの直後の文字をイコール以降の記述で定義しているものになります。例えば以下のものですが
var FOLDER_ID = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("保存").getRange("B1").getValue();
⇒こちらは「FOLDER_ID」にスプレッドシートの「保存」シートのB1セルの値を取得するものになります。この後のプログラムで続く4行のvarが先頭に来るものはすべて同じような処理になります。
詳しく見ていきます。
SpreadsheetApp:Googleスプレッドシートのアプリを使うために必ず必要なものです。
getActiveSpreadsheet():アクティブなスプレッドシートを取得するというものです。
⇒アクティブでないシートを設定したい場合は「openById(id)」か「openByUrl(url)」と記載します。
idの部分はスプレッドシートIDとなり下記の赤字の部分となります。url部分は下記のURLそのものを記載します。記載する際は「'」でくくる必要があります。
「https://docs.google.com/spreadsheets/d/1NeKIqL_28swYtPxS_wq1OiGaEjk2XXXXXXXXX/edit#gid=XXXXXXXXX」
getSheetByName("保存"):スプレッドシートファイルのシート名を選択するものです。
⇒シート名を指定せずアクティブなシートとしたい場合は「getActiveSpreadsheet()」とします。
getRange("B1").getValue():指定したシートのセルを指定してセルの値を取得するのもです。
これらを「.」でつないで1行が完成します。
流れは「使用するアプリ」⇒「どのファイル」⇒「どのシート」⇒「どのセル」の値を取得するとなります。
1行分が書き終わったら「;」をつけます。文を区切るイメージです。
下記は上でご説明したアプリ部分をGoogleドライブを使いたいため「DriveApp」に変更しており、ドライブのどのフォルダを選択するかを「getFolderById(id)」で表していますid部分はプログラムの1行目の「var FOLDER_ID~」で定義したものを入れています。
var myFolder = DriveApp.getFolderById(FOLDER_ID);
下記も同様に使いたいアプリがGmailなので「GmailApp」に変更しており、Gmailの検索をしたいので「search()」で検索条件を決めています。
searchmail、afterDay、beforeDayは定義したものを入れています。has:attachmentは添付ファイルがあるものを検索するためのものです。
var myThreads = GmailApp.search(searchmail + ' after:' + afterDay + ' before:' + beforeDay + ' has:attachment', 0, 300);
例えば前回の画像になりますが下図の場合どうなるかですが、
「from:@gmail.com after:2020/11/01 before:2020/11/03 has:attachment」と表されます。(間の+は文字をつなげるために使っています。)
その条件に合ったものの300通分を検索するのが上記のプログラムの意味となります。
下記はGmailアプリでメッセージの取得を行うものです。「.getMessagesForThreads」で個別のメッセージを取得しています。
var myMessages = GmailApp.getMessagesForThreads(myThreads);
下記はfor文を使ってメッセージ1つ1つを確認し、添付ファイルがあればGoogleドライブの指定フォルダに添付ファイルを格納していくというものになります。
for(var i in myMessages){
for(var j in myMessages[i]){
var attachments = myMessages[i][j].getAttachments();
for(var k in attachments){ myFolder.createFile(attachments[k]);
}
}
}
こちらはfunctionを使っているので別の プログラムを作っています。
「SpreadsheetApp.getUi()」でスプレッドシートアプリのUIを取得し、「createMenu」でメニューに「添付ファイルの保存」を追加し、「addItem」でメニューにサブメニューのようなものを作るイメージです。最後にこのメニューをクリックすると「fetchFile」プログラムが動くようにしています。
function onOpen() { SpreadsheetApp.getUi() .createMenu('添付ファイルの保存').addItem('添付ファイルの保存', 'fetchFile').addToUi(); }
長くなりましたが最後まで読んでくださいましてありがとうございます。