teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コメントの追加

2018/09/05 08:49

投稿

macaron_xxx
macaron_xxx

スコア3191

answer CHANGED
@@ -28,18 +28,20 @@
28
28
  valMsgs[i][2] = myMsgs[i][0].getTo();
29
29
  valMsgs[i][3] = myMsgs[i][0].getSubject();
30
30
  valMsgs[i][4] = myThreads[i].getPermalink();
31
- var result = myMsgs[i][0].getPlainBody().match(/1234[^\n]*/g);
31
+ var result = myMsgs[i][0].getPlainBody().match(/1234[^\n]*/g); // 正規表現で本文中の文字列を取り出す。
32
- Array.prototype.push.apply(valMsgs[i], result);
32
+ Array.prototype.push.apply(valMsgs[i], result); // 元の配列に取り出した配列を追加する。
33
33
  if (result.length > maxLength) {
34
- maxLength = result.length;
34
+ maxLength = result.length; // 取り出した配列の最大の長さを取得しておく
35
35
  }
36
36
  }
37
37
 
38
- maxLength += 5; // ここで固定項目数分加算
38
+ maxLength += 5; // ここで固定項目数分加算(項目数=カラム数を固定する)
39
39
 
40
+ /* カラム数に足りない行にカラムを追加する */
40
41
  valMsgs.forEach(function(x) {
41
42
  if (x.length < maxLength) {
43
+ /* 足りないカラム数分だけ空の配列を用意して追加する */
42
- var s = Array.apply("", Array(maxLength - x.length)).map(function() {
44
+ var s = Array.apply(null , Array(maxLength - x.length)).map(function() {
43
45
  return "";
44
46
  });
45
47
  Array.prototype.push.apply(x, s);

2

追記の修正

2018/09/05 08:49

投稿

macaron_xxx
macaron_xxx

スコア3191

answer CHANGED
@@ -34,6 +34,8 @@
34
34
  maxLength = result.length;
35
35
  }
36
36
  }
37
+
38
+ maxLength += 5; // ここで固定項目数分加算
37
39
 
38
40
  valMsgs.forEach(function(x) {
39
41
  if (x.length < maxLength) {
@@ -46,7 +48,7 @@
46
48
 
47
49
  /* スプレッドシートに出力 */
48
50
  if(myMsgs.length>0){
49
- SpreadsheetApp.getActiveSheet().getRange(2, 1, i, 5 + maxLength).setValues(valMsgs); //シートに貼り付け
51
+ SpreadsheetApp.getActiveSheet().getRange(2, 1, i, maxLength).setValues(valMsgs); //シートに貼り付け
50
52
  }
51
53
  }
52
54
  ```

1

追記

2018/09/05 08:43

投稿

macaron_xxx
macaron_xxx

スコア3191

answer CHANGED
@@ -3,4 +3,50 @@
3
3
  //valMsgs[i][5] = myMsgs[i][0].getPlainBody().match(/1234[^\n]*/g);
4
4
 
5
5
  Array.prototype.push.apply(valMsgs[i], myMsgs[i][0].getPlainBody().match(/1234\d{5}/g));
6
+ ```
7
+
8
+ ## 追記
9
+ 配列の長さがバラバラになるのを考慮してませんでした。
10
+ こんな感じでいかがでしょうか?
11
+
12
+ 試してないので、エラーがでたらすみません。。
13
+ ```js
14
+ function searchContactMail() {
15
+ /* Gmailから特定条件のスレッドを検索しメールを取り出す */
16
+ var mail_query = ('ラベル条件');
17
+ var myThreads = GmailApp.search(mail_query, 0, 50); //条件にマッチしたスレッドを取得
18
+ var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する →二次元配列で格納
19
+
20
+ var valMsgs = [];
21
+
22
+ /* 各メールから日時、送信元、件名、内容を取り出す*/
23
+ var maxLength = 0;
24
+ for(var i = 0;i < myMsgs.length;i++){
25
+ valMsgs[i] = [];
26
+ valMsgs[i][0] = myMsgs[i][0].getDate();
27
+ valMsgs[i][1] = myMsgs[i][0].getFrom();
28
+ valMsgs[i][2] = myMsgs[i][0].getTo();
29
+ valMsgs[i][3] = myMsgs[i][0].getSubject();
30
+ valMsgs[i][4] = myThreads[i].getPermalink();
31
+ var result = myMsgs[i][0].getPlainBody().match(/1234[^\n]*/g);
32
+ Array.prototype.push.apply(valMsgs[i], result);
33
+ if (result.length > maxLength) {
34
+ maxLength = result.length;
35
+ }
36
+ }
37
+
38
+ valMsgs.forEach(function(x) {
39
+ if (x.length < maxLength) {
40
+ var s = Array.apply("", Array(maxLength - x.length)).map(function() {
41
+ return "";
42
+ });
43
+ Array.prototype.push.apply(x, s);
44
+ }
45
+ });
46
+
47
+ /* スプレッドシートに出力 */
48
+ if(myMsgs.length>0){
49
+ SpreadsheetApp.getActiveSheet().getRange(2, 1, i, 5 + maxLength).setValues(valMsgs); //シートに貼り付け
50
+ }
51
+ }
6
52
  ```