質問編集履歴
4
内容訂正
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
コード追加
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
内容の体裁確認
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
アドバイスに基づいた実行結果を反映
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
|
+
```
|