いつも本当にお世話になっております。
ご教示いただきたく質問させていただきました。
よろしくお願いいたします。
【やりたいこと】
GASを用いて任意のGmailをスプレッドシートにて取得していますが、本文を分割して表示させるためにデバックを行っています。現在は本文が一括で一つのセルで取得されていますが、内容ごとに分割させることを検討しています。(お名前・電話番号・メールアドレスなど)
詳細は下記の質問を参照ください。
リンク内容
いろんな方法があると思いますが、VBAと併用して分割する方法を見つけました。
VBA
1Function ExtractLine(value As Range, i) 2 Dim ArryValue 3 ArryValue = Split(value.value, Chr(10)) 4 ExtractLine = ArryValue(i - 1) 5End Function
【質問内容】
VBAで関数を作成する方法ですが、GASの領域でVBAを使って関数を作成することができるのでしょうか?
スプレッドシートにマクロが登録できるようなので試してみたいのですが、現在のコードが新しいスプレッドシートを作成するように作成されているため、あらかじめマクロを登録することができず、試せておりません。。。
そこで、まず特定のスプレッドシートに処理されるようにデバックしたいのでご教示いただきたく質問させていただきました。
【試したこと】
エクセルで下記の計算式を用いて実施したところ、関数は問題なく働きました。
取得したい内容 計算式
1.1行目を取得 =ExtractLine(A2,1)
2.2行目を取得 =ExtractLine(A2,2)
3.3行目を取得 =ExtractLine(A2,3)
4.4行目を取得 =ExtractLine(A2,4)
【参考リンク】
【現在のコード】
function contact_Gmail() { var rowNumber = 2; var mysheetname = 'Gmail解析_' + DateString(new Date()); var GmailSS = SpreadsheetApp.create(mysheetname); var mySheet = GmailSS.getSheets()[0]; mySheet.setName(mysheetname); mySheet.getRange(1,1).setValue("日時"); mySheet.getRange(1,2).setValue("送信元"); mySheet.getRange(1,3).setValue("件名"); mySheet.getRange(1,4).setValue("本文"); mySheet.getRange(1,5).setValue("ご予約"); mySheet.getRange(1,6).setValue("お名前"); mySheet.getRange(1,7).setValue("電話番号"); mySheet.getRange(1,8).setValue("メールアドレス"); var newfolder = DriveApp.createFolder(mysheetname); var searchQuery = 'subject:(”予約が確定" OR "finalized) '; var threads = GmailApp.search(searchQuery, 0, 200); var mymsg=[]; var msgs = GmailApp.getMessagesForThreads(threads); for(var i = 0; i < msgs.length; i++) { mymsg[i]=[]; for(var j = 0; j < msgs[i].length; j++) { mymsg[i][0] = msgs[i][j].getDate(); mymsg[i][1] = msgs[i][j].getFrom(); mymsg[i][2] = msgs[i][j].getSubject(); var nbsp = String.fromCharCode(160); mymsg[i][3] = msgs[i][j].getPlainBody().replace(/<("[^"]*"|'[^']*'|[^'">])*>|nbsp/g,'').replace(/&; | /g,'').substring(0,50000); } } if(mymsg.length>0){ GmailSS.getSheets()[0].getRange(2, 1, i, 4).setValues(mymsg); //シートに貼り付け } } function DateString(date){ return date.getFullYear().toString() + date.getMonth().toString() + date.getDate().toString() + date.getHours().toString() + date.getMinutes().toString() + date.getSeconds().toString(); };
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。