回答編集履歴

2

2020/03/05 13:59

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -112,7 +112,7 @@
112
112
 
113
113
  var lastRow = mySheet.getDataRange().getLastRow();
114
114
 
115
- mySheet.getRange(lastRow + 1, 1, valMsgs.length, 8).setValues(valMsgs);
115
+ mySheet.getRange(lastRow + 1, 1, valMsgs.length, 10).setValues(valMsgs);
116
116
 
117
117
  }
118
118
 

1

a

2020/03/05 13:59

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -25,3 +25,115 @@
25
25
 
26
26
 
27
27
  なお、この方法だとハイパーリンクされるのは最後の添付ファイル 1 個になってしまいます。元のコードの作者は何らかの前提をおいていたことが想像されます。
28
+
29
+
30
+
31
+ ---
32
+
33
+ ```javascript
34
+
35
+ var mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('メール蓄積テスト');
36
+
37
+
38
+
39
+ function searchContactMail() {
40
+
41
+
42
+
43
+ /* Gmailから特定条件のスレッドを検索しメールを取り出す */
44
+
45
+ var strTerms = '(subject:"件名+’’ OR "from:mail@address")';
46
+
47
+ var myThreads = GmailApp.search(strTerms, 0, 30);
48
+
49
+ var myMsgs = GmailApp.getMessagesForThreads(myThreads);//二次元配列
50
+
51
+ var fol = DriveApp.getFolderById('添付ファイル保存先フォルダID');
52
+
53
+ var valMsgs = [];
54
+
55
+
56
+
57
+ /* 各メールから日時、送信元、件名、内容、ID、添付ファイルを取り出す */
58
+
59
+ for (var i = 0; i < myMsgs.length; i++) {
60
+
61
+ for (var j = 0; j < myMsgs[i].length; j++) {
62
+
63
+ var msid = myMsgs[i][j].getId();//メッセージIDを取得
64
+
65
+ //もしメッセージIDがスプレッドシートに存在しなければ
66
+
67
+ if (!hasId(msid)) {
68
+
69
+ var date = myMsgs[i][j].getDate();
70
+
71
+ var from = myMsgs[i][j].getFrom();
72
+
73
+ var subj = myMsgs[i][j].getSubject();
74
+
75
+ var body = myMsgs[i][j].getPlainBody().slice(0, 200);
76
+
77
+ var perm = myThreads[i].getPermalink();
78
+
79
+ var attach = myMsgs[i][j].getAttachments();
80
+
81
+ var links = ["","",""];
82
+
83
+ for (var k = 0; k < attach.length; k++) {
84
+
85
+ var blobFile = attach[k];
86
+
87
+ var originalName = blobFile.getName();
88
+
89
+ var newName = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd/HH:mm (E)') + originalName;
90
+
91
+ blobFile.setName(newName);
92
+
93
+ var f = fol.createFile(blobFile);//ドライブに添付ファイルを保存
94
+
95
+ links.unshift(`=HYPERLINK("${f.getUrl()}","${newName}")`)
96
+
97
+ }
98
+
99
+ valMsgs.push([date, from, subj, body, msid, perm, attach].concat(links.slice(0,3)));
100
+
101
+ }
102
+
103
+ }
104
+
105
+ }
106
+
107
+
108
+
109
+ /* スプレッドシートに出力 */
110
+
111
+ if (valMsgs.length > 0) {//新規メールがある場合、末尾に追加する
112
+
113
+ var lastRow = mySheet.getDataRange().getLastRow();
114
+
115
+ mySheet.getRange(lastRow + 1, 1, valMsgs.length, 8).setValues(valMsgs);
116
+
117
+ }
118
+
119
+ }
120
+
121
+
122
+
123
+ function hasId(id) {
124
+
125
+
126
+
127
+ var data = mySheet.getRange(1, 5, mySheet.getLastRow(), 1).getValues();//E列(メッセージID)を検索範囲とする
128
+
129
+ var hasId = data.some(function (value, index, data) {//コールバック関数
130
+
131
+ return (value[0] === id);
132
+
133
+ });
134
+
135
+ return hasId;
136
+
137
+ }
138
+
139
+ ```