現在、メールの内容を正規表現で読み込みスプレッドシートへ書き出すプログラムを作っているのですが、別のスプレッドシートへも書き出したく下記コードを入力したのですが、「SpreadsheetApp.setActiveSheet」で外部シートを読み込もうとするとエラーが発生してしまいます。
スプレッドシート関数で例えるとIMPORTRANGE関数のようなものと認識しているため、確かに読み取りはできても書き出しはできないのかなという理由は納得したのですが、何か他に方法がありましたらお教え願います。
エラーメッセージ
指定したシートはスプレッドシートの一部である必要があります。
本コード
function getMail(){ var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var objSpreadsheet2 = SpreadsheetApp.openById('xxxxxxxx'); // シート名を記入。 var objSheet = objSpreadsheet.getSheetByName("シート1"); var objSheet2 = objSpreadsheet2.getSheetByName("ファイル"); var sheet = SpreadsheetApp.setActiveSheet(objSheet); var sheet2 = SpreadsheetApp.setActiveSheet(objSheet2); var start = 0; // 取得するメールの最大件数 var max = 100; // Gmailのラベル名 var threads = GmailApp.search('label:シート書き出し is:unread',start,max); var Messages = GmailApp.getMessagesForThreads(threads); var row = sheet.getLastRow() + 1; var row2 = sheet2.getLastRow() + 1; // 見出しがあるためシートの1行目を固定 sheet.setFrozenRows(1); sheet2.setFrozenRows(1); for(var i = 0; i < Messages.length; i++) { for(var j = 0; j < Messages[i].length; j++) { var body = Messages[i][j].getPlainBody(); var date = threads[i].getMessages()[j].getDate(); var regtitle = new RegExp('タイトル:' + '.*'); var title = body.match(regtitle)[0].replace('タイトル:', '').replace('\r', ''); // 同じメールを読み込まないように、メッセージを既読にする threads[i].markRead(); // それぞれの項目をセルを指定してスプレッドシートへ転記 sheet.getRange(row,1).setValue([title]); sheet2.getRange(row,3).setValue([title]); sheet.getRange(row,1).setValue([date]); sheet2.getRange(row,2).setValue([date]); row++ row2++ } } }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/08 14:47