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

質問編集履歴

4

内容訂正

2017/09/21 06:13

投稿

idrgon
idrgon

スコア6

title CHANGED
File without changes
body CHANGED
@@ -21,7 +21,7 @@
21
21
 
22
22
  ###<実行コード②> 空白削除&データ整理(文字列と数字の分割)
23
23
  下記にGmail本文&表のスクレイピング、そしてアドバイスに従い
24
- 空白削除などデータ整理のコードを追加しました。
24
+ 空白削除および表整理の処理コードを追加しました。
25
25
 
26
26
  ```ここに言語を入力
27
27
  function getMail() {

3

コード追加

2017/09/21 06:13

投稿

idrgon
idrgon

スコア6

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,10 @@
19
19
 
20
20
  よろしくお願いいたします。
21
21
 
22
- ###<実現結果②> 空白削除&文字列
22
+ ###<実行コード②> 空白削除&データ整理(文字列と数字の分割)
23
+ 下記にGmail本文&表のスクレイピング、そしてアドバイスに従い
24
+ 空白削除などデータ整理のコードを追加しました。
25
+
23
26
  ```ここに言語を入力
24
27
  function getMail() {
25
28
 

2

内容の体裁確認

2017/09/21 05:36

投稿

idrgon
idrgon

スコア6

title CHANGED
File without changes
body CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  よろしくお願いいたします。
21
21
 
22
- ###<実現結果②> 空白削除&
22
+ ###<実現結果②> 空白削除&文字列
23
23
  ```ここに言語を入力
24
24
  function getMail() {
25
25
 

1

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

2017/09/21 05:24

投稿

idrgon
idrgon

スコア6

title CHANGED
File without changes
body CHANGED
@@ -17,4 +17,80 @@
17
17
  それぞれ完成イメージのように整理データで保存したいです。
18
18
  ①と②を実現できるGASコードについてアドバイスいただけますでしょうか。
19
19
 
20
- よろしくお願いいたします。
20
+ よろしくお願いいたします。
21
+
22
+ ###<実現結果②> 空白削除&
23
+ ```ここに言語を入力
24
+ function getMail() {
25
+
26
+ /* メールを検索し本文を変数に保存 */
27
+ var threads = GmailApp.search('subject:Softbank Daily Results - SIM Box Detection'); // メールを検索し一覧を取得
28
+ var thread_top = threads[0]; // そのうちいちばん新しいメールを取得
29
+
30
+ //var mail_body = thread_top.getMessages()[0].getPlainBody(); // <br/>タグなしの本文を取得 ※本文のHTMLテキストが表示されず
31
+ var mail_body = thread_top.getMessages()[0].getBody(); // 本文のテキストを取得
32
+ //var mail_body_split = mail_body.split(/\r\n|\r|\n/); // メールの本文を改行ごとに配列に格納
33
+
34
+ /* テキストに含まれているHTMLタグを除去する */
35
+ var str = mail_body;
36
+ var str2 = str.replace(/<('[^']*'|'[^']*'|[^''>])*>/g,''); //()内の文字列を空欄に置き換え
37
+
38
+ /* HTMLテキストの前置き箇所を除外 */
39
+ var str3 = str2.replace('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">','');
40
+ var str4 = str3.replace(/<!-- tell the browser to not use it's cache for this page -->/g ,"");
41
+ var str5 = str4.replace(/body {font-weight:normal; font-size:14px; background-color:#cccccc; font-family:Arial, Helvetica, sans-serif; margin:0px;}/g ,'');
42
+ var str6 = str5.replace(/table.contentwithborder {border:1px solid black;border-collapse:collapse;text-align:left;vertical-align:top;}/g, '');
43
+ var str7 = str6.replace(/td.grid {border:1px solid black;text-align:left;border-collapse:collapse;}/g,'');
44
+ var str8 = str7.replace(/td.transposecolgrid {background-color:#f6f6f6;}/g, '');
45
+ var str9 = str8.replace(/SIGOS SBD REPORTING Report/g ,'');
46
+
47
+ /* 表の件名のみ抽出 */
48
+ var str11 = str9.replace('<span style="color:#000080; line-height:150%; padding-left:5px"><strong></strong></span>', '');
49
+ /* 表フォーマットの除外 */
50
+ var str12 = str11.replace('<table style="font-size:-12px;font-weight: normal; font-style: normal;border:1px solid; border-collapse:collapse;">' ,'');
51
+
52
+ /* Daily test overviewの表タグを除外 */
53
+ var str13 = str12.replace('<table style="border-collapse:collapse;font-size:12px;font-weight: normal; font-style: normal;text-align:right;background-color:#f6f6f6;">' ,'');
54
+ var str14 = str13.replace('<tr style="background-color:#ffffff;color:#000000;font-size:12px;text-align:center;vertical-align:center;">', '');
55
+ 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>', '');
56
+ 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>', '');
57
+
58
+ /* 表項目のタグ置換え */
59
+ 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>', '');
60
+
61
+ /* 表データのタグ置換え */
62
+ var str18 = str17.replace('<td class = "grid" style="text-align:right;vertical-align:center;border:1px solid; border-collapse:collapse;"></th>', '');
63
+ Logger.log(str18.replace(' ',''));
64
+
65
+ var mail_body_split = str18.split(/\r\n/); // メールの本文を改行ごとに配列に格納
66
+
67
+ /* シート名用にタイムスタンプを取得 */
68
+ var today = new Date(); // 現在のタイムスタンプを取得
69
+ var timestamp = today.getFullYear()+"/"+(today.getMonth()+1)+"/"+today.getDate(); // タイムスタンプを整形(YYYY/MM/DD)
70
+
71
+ /* シートを追加(シート名はタイムスタンプ */
72
+ var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
73
+ objSpreadsheet.insertSheet(timestamp);
74
+
75
+ /* シートの移動(上記で作成したシートに移動) */
76
+ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
77
+ var sheet = spreadsheet.getSheetByName(timestamp);
78
+ spreadsheet.setActiveSheet(sheet);
79
+
80
+ /* セルにデータを追加(A1のセル) */
81
+ for(var i=0; i<mail_body_split.length; i++) { // 配列のデータの数(改行の行数)だけ繰り返す
82
+ sheet.getRange(i+1,1).setValue(mail_body_split[i]); // 1行ごとに貼り付ける(貼り付けるセルを1行ずつ下にする)
83
+ }
84
+
85
+ /* 空行を削除 Bパターン */
86
+ var str19 = mail_body_split.replace(/\n+/g, "\n");
87
+
88
+ // 文字列と数字を分割
89
+ var str20 = str19;
90
+ var numberIndex = str20.search(/\d/);
91
+ var str21= str20.slice(0, numberIndex); //
92
+ var str21= str20.slice(numberIndex); // 12345
93
+
94
+ }
95
+
96
+ ```