前提・実現したいこと
GASでGメールの添付ファイルごとにフォルダを作成ないし検索して保存をしたいです。
保存するファイルのタイトルは、BAもしくはBBで始まり、
()の中に、頭がAA,ABなどの2~3文字のアルファベットと数字からなる
コードが付けられています。
※BA(AA数字).PDF 等
ファイルの到着はBAが来てからBBが来る順番です。
ドライブのフォルダはAA,AB,AC…というように複数あり、スプレッドシートに
A列 B列 C列
AA /AA[0-9]/ DriveApp.getFolderById('AAのフォルダID')
と入力してあります。
スプレッドシートから拾ってきた正規表現を使って、
フォルダを振り分けるtest関数のところでエラーが出てしまいます。
正規表現を
var AA = /BB(AA.*?/;
フォルダを
var F_AA = DriveApp.getFolderById('AAのフォルダID');
と直で定義したものは動いていたので、2次配列が悪さをしているのではと疑っています。
何卒お力添えをお願い致します。
発生している問題・エラーメッセージ
実行に失敗: TypeError: オブジェクト /AA[0-9]/ で関数 test が見つかりません。(行 28、ファイル「コード」)
該当のソースコード
var BA = /^BA(/;//BA(から始まる var BB = /^BB(/;//BB(から始まる var LAST = /).*/;//)以降 var SEARCH_TERM = 'has:attachment';//添付ファイルがあるメール function fetchFile(){ var sheet = SpreadsheetApp.getActiveSheet(); var check = sheet.getRange('A1:C10').getValues(); //正規表現とフォルダのリスト var myThreads = GmailApp.search(SEARCH_TERM, 0, 200); //条件にマッチしたスレッドを検索して取得 var myMessages = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得し二次元配列で格納 for(var i in myMessages){ for(var j in myMessages[i]){ var attachments = myMessages[i][j].getAttachments(); //添付ファイルを取得 myMessages[i][j].markRead(); //メッセージを既読にする for(var k in attachments){ var str = attachments[k].getName();//ファイル名取得 if(BA.test(str)){//タイトルにBAが含まれる var foldername = fetchData(str,BA,LAST);//フォルダ名抽出 for(var l in check){ if(check[l][1].test(str)){ var a =getFolder(check[l][2],foldername);//フォルダを探す if(typeof a !== "undefined"){ continue;//フォルダが存在したらスキップ } var newfolder = check[l][2].createFolder(foldername);//フォルダ作成 newfolder.createFile(attachments[k]); //BAファイル保存 } } } if(BB.test(str)){//タイトルにBBが含まれる var foldername = fetchData(str,BB,LAST);//フォルダ名抽出 for(var l in check){ if(check[l][1].test(str)){ var a = getFolder(check[l][2],foldername);//フォルダを探す if(typeof a === "undefined"){//フォルダがなかったら var content = "ドライブに" + foldername + "のフォルダが存在しません。\n確認してください。\n\nsend from GAS" MailApp.sendEmail('*****@GMAIL.COM', 'エラーログ', content); continue; } var b = getFile(a,str);//フォルダaの中にファイルstrがいるかどうか if(typeof b === "undefined"){//ファイルが存在しなかったら a.createFile(attachments[k]); //BBファイル保存 } } } } }}} } function fetchData(str, pre, suf) { var foldername = str.replace(pre, '').replace(suf, ''); return foldername; } function getFolder(pass,key) { var folder = pass.getFoldersByName(key); var a = folder.next();//最初にヒットしたkey名のフォルダ return a ; } function getFile(pass,key) { var files = pass.getFilesByName(key); var b = files.next();//最初にヒットしたkey名のファイル return b ; }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/01 07:32