質問編集履歴

4

内容訂正

2017/09/21 06:13

投稿

idrgon
idrgon

スコア6

test CHANGED
File without changes
test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  下記にGmail本文&表のスクレイピング、そしてアドバイスに従い
46
46
 
47
- 空白削除などデータ整理のコードを追加しました。
47
+ 空白削除および表整理の処理コードを追加しました。
48
48
 
49
49
 
50
50
 

3

コード追加

2017/09/21 06:13

投稿

idrgon
idrgon

スコア6

test CHANGED
File without changes
test CHANGED
@@ -40,7 +40,13 @@
40
40
 
41
41
 
42
42
 
43
- ###<実現結果②> 空白削除&文字列
43
+ ###<実行コード②> 空白削除&データ整理(文字列と数字の分割)
44
+
45
+ 下記にGmail本文&表のスクレイピング、そしてアドバイスに従い
46
+
47
+ 空白削除などデータ整理のコードを追加しました。
48
+
49
+
44
50
 
45
51
  ```ここに言語を入力
46
52
 

2

内容の体裁確認

2017/09/21 05:36

投稿

idrgon
idrgon

スコア6

test CHANGED
File without changes
test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- ###<実現結果②> 空白削除&
43
+ ###<実現結果②> 空白削除&文字列
44
44
 
45
45
  ```ここに言語を入力
46
46
 

1

アドバイスに基づいた実行結果を反映

2017/09/21 05:24

投稿

idrgon
idrgon

スコア6

test CHANGED
File without changes
test CHANGED
@@ -37,3 +37,155 @@
37
37
 
38
38
 
39
39
  よろしくお願いいたします。
40
+
41
+
42
+
43
+ ###<実現結果②> 空白削除&
44
+
45
+ ```ここに言語を入力
46
+
47
+ function getMail() {
48
+
49
+
50
+
51
+ /* メールを検索し本文を変数に保存 */
52
+
53
+ var threads = GmailApp.search('subject:Softbank Daily Results - SIM Box Detection'); // メールを検索し一覧を取得
54
+
55
+ var thread_top = threads[0]; // そのうちいちばん新しいメールを取得
56
+
57
+
58
+
59
+ //var mail_body = thread_top.getMessages()[0].getPlainBody(); // <br/>タグなしの本文を取得 ※本文のHTMLテキストが表示されず
60
+
61
+ var mail_body = thread_top.getMessages()[0].getBody(); // 本文のテキストを取得
62
+
63
+ //var mail_body_split = mail_body.split(/\r\n|\r|\n/); // メールの本文を改行ごとに配列に格納
64
+
65
+
66
+
67
+ /* テキストに含まれているHTMLタグを除去する */
68
+
69
+ var str = mail_body;
70
+
71
+ var str2 = str.replace(/<('[^']*'|'[^']*'|[^''>])*>/g,''); //()内の文字列を空欄に置き換え
72
+
73
+
74
+
75
+ /* HTMLテキストの前置き箇所を除外 */
76
+
77
+ var str3 = str2.replace('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">','');
78
+
79
+ var str4 = str3.replace(/<!-- tell the browser to not use it's cache for this page -->/g ,"");
80
+
81
+ var str5 = str4.replace(/body {font-weight:normal; font-size:14px; background-color:#cccccc; font-family:Arial, Helvetica, sans-serif; margin:0px;}/g ,'');
82
+
83
+ var str6 = str5.replace(/table.contentwithborder {border:1px solid black;border-collapse:collapse;text-align:left;vertical-align:top;}/g, '');
84
+
85
+ var str7 = str6.replace(/td.grid {border:1px solid black;text-align:left;border-collapse:collapse;}/g,'');
86
+
87
+ var str8 = str7.replace(/td.transposecolgrid {background-color:#f6f6f6;}/g, '');
88
+
89
+ var str9 = str8.replace(/SIGOS SBD REPORTING Report/g ,'');
90
+
91
+
92
+
93
+ /* 表の件名のみ抽出 */
94
+
95
+ var str11 = str9.replace('<span style="color:#000080; line-height:150%; padding-left:5px"><strong></strong></span>', '');
96
+
97
+ /* 表フォーマットの除外 */
98
+
99
+ var str12 = str11.replace('<table style="font-size:-12px;font-weight: normal; font-style: normal;border:1px solid; border-collapse:collapse;">' ,'');
100
+
101
+
102
+
103
+ /* Daily test overviewの表タグを除外 */
104
+
105
+ var str13 = str12.replace('<table style="border-collapse:collapse;font-size:12px;font-weight: normal; font-style: normal;text-align:right;background-color:#f6f6f6;">' ,'');
106
+
107
+ var str14 = str13.replace('<tr style="background-color:#ffffff;color:#000000;font-size:12px;text-align:center;vertical-align:center;">', '');
108
+
109
+ var str15 = str14.replace('<th style="background-color:#ffffff;font-size:12px;border:1px solid; font-weight: normal; font-style: normal;"><p></th><th style="background-color:#ffffff;font-size:12px;border:1px solid; font-weight: normal; font-style: normal;writing-mode:tb-rl;filter:flipv fliph;"><p></th></p></tr>', '');
110
+
111
+ var str16 = str15.replace('<td style="border:1px solid; color:#000000;background-color:#ffffff;font-weight: normal; font-style: normal;text-align:left;vertical-align:center;font-size:12px;"></td><td style="border:1px solid; vertical-align:center;"></td></tr>', '');
112
+
113
+
114
+
115
+ /* 表項目のタグ置換え */
116
+
117
+ var str17 = str16.replace('<th style="font-size:-12px;font-weight: normal; font-style: normal;text-align:center;vertical-align:center;border:1px solid; border-collapse:collapse;"></th>', '');
118
+
119
+
120
+
121
+ /* 表データのタグ置換え */
122
+
123
+ var str18 = str17.replace('<td class = "grid" style="text-align:right;vertical-align:center;border:1px solid; border-collapse:collapse;"></th>', '');
124
+
125
+ Logger.log(str18.replace(' ',''));
126
+
127
+
128
+
129
+ var mail_body_split = str18.split(/\r\n/); // メールの本文を改行ごとに配列に格納
130
+
131
+
132
+
133
+ /* シート名用にタイムスタンプを取得 */
134
+
135
+ var today = new Date(); // 現在のタイムスタンプを取得
136
+
137
+ var timestamp = today.getFullYear()+"/"+(today.getMonth()+1)+"/"+today.getDate(); // タイムスタンプを整形(YYYY/MM/DD)
138
+
139
+
140
+
141
+ /* シートを追加(シート名はタイムスタンプ */
142
+
143
+ var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
144
+
145
+ objSpreadsheet.insertSheet(timestamp);
146
+
147
+
148
+
149
+ /* シートの移動(上記で作成したシートに移動) */
150
+
151
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
152
+
153
+ var sheet = spreadsheet.getSheetByName(timestamp);
154
+
155
+ spreadsheet.setActiveSheet(sheet);
156
+
157
+
158
+
159
+ /* セルにデータを追加(A1のセル) */
160
+
161
+ for(var i=0; i<mail_body_split.length; i++) { // 配列のデータの数(改行の行数)だけ繰り返す
162
+
163
+ sheet.getRange(i+1,1).setValue(mail_body_split[i]); // 1行ごとに貼り付ける(貼り付けるセルを1行ずつ下にする)
164
+
165
+ }
166
+
167
+
168
+
169
+ /* 空行を削除 Bパターン */
170
+
171
+ var str19 = mail_body_split.replace(/\n+/g, "\n");
172
+
173
+
174
+
175
+ // 文字列と数字を分割
176
+
177
+ var str20 = str19;
178
+
179
+ var numberIndex = str20.search(/\d/);
180
+
181
+ var str21= str20.slice(0, numberIndex); //
182
+
183
+ var str21= str20.slice(numberIndex); // 12345
184
+
185
+
186
+
187
+ }
188
+
189
+
190
+
191
+ ```