質問: id); }); return hasId; }
回答: 可能です。 では満足しないのでしょうね。 ``` var hyperlink_formula = "=HYPERLINK(\"" + fol.getFilesByName(newName).next().getUrl() + "\",\"" + newName + "\")"; ``` を ``` var hyperlink_formula = attach.length ? "=HYPERLINK(\"" + fol.getFilesByName(newName).next().getUrl() + "\",\"" + newName + "\")" : ""; ``` でよいのではないかと想像します。 なお、この方法だとハイパーリンクされるのは最後の添付ファイル 1 個になってしまいます。元のコードの作者は何らかの前提をおいていたことが想像されます。 ``` var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール蓄積テスト'); function searchContactMail() { /* Gmailから特定条件のスレッドを検索しメールを取り出す */ var strTerms = '(subject:"件名+’’ OR "from:mail@address")'; var myThreads = GmailApp.search(strTerms, 0, 30); var myMsgs = GmailApp.getMessagesForThreads(myThreads);//二次元配列 var fol = DriveApp.getFolderById('添付ファイル保存先フォルダID'); var valMsgs = []; /* 各メールから日時、送信元、件名、内容、ID、添付ファイルを取り出す */ for (var i = 0; i < myMsgs.length; i++) { for (var j = 0; j < myMsgs[i].length; j++) { var msid = myMsgs[i][j].getId();//メッセージIDを取得 //もしメッセージIDがスプレッドシートに存在しなければ if (!hasId(msid)) { var date = myMsgs[i][j].getDate(); var from = myMsgs[i][j].getFrom(); var subj = myMsgs[i][j].getSubject(); var body = myMsgs[i][j].getPlainBody().slice(0, 200); var perm = myThreads[i].getPermalink(); var attach = myMsgs[i][j].getAttachments(); var links = ["","",""]; for (var k = 0; k < attach.length; k++) { var blobFile = attach[k]; var originalName = blobFile.getName(); var newName = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd/HH:mm (E)') + originalName; blobFile.setName(newName); var f = fol.createFile(blobFile);//ドライブに添付ファイルを保存 links.unshift(`=HYPERLINK("${f.getUrl()}","${newName}")`) } valMsgs.push([date, from, subj, body, msid, perm, attach].concat(links.slice(0,3))); } } } /* スプレッドシートに出力 */ if (valMsgs.length > 0) {//新規メールがある場合、末尾に追加する var lastRow = mySheet.getDataRange().getLastRow(); mySheet.getRange(lastRow + 1, 1, valMsgs.length, 10).setValues(valMsgs); } } function hasId(id) { var data = mySheet.getRange(1, 5, mySheet.getLastRow(), 1).getValues();//E列(メッセージID)を検索範囲とする var hasId = data.some(function (value, index, data) {//コールバック関数 return (value[0] === id); }); return hasId; } ```