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

質問編集履歴

4

質問内容の変更

2017/09/11 03:29

投稿

ryuichiro
ryuichiro

スコア9

title CHANGED
File without changes
body CHANGED
@@ -37,12 +37,11 @@
37
37
 
38
38
  /* Daily test overviewの表タグを除外 */
39
39
  var str13 = str12.replace('<table style="border-collapse:collapse;font-size:12px;font-weight: normal; font-style: normal;text-align:right;background-color:#f6f6f6;">' ,'');
40
- var str14 = str13.replace('<tr style="background-color:#ffffff;color:#000000;font-size:12px;text-align:center;vertical-align:center;">', '');
41
- 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>', '');
42
- 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>', '');
43
-
40
+ //※一部略
41
+
44
42
  /* 表項目のタグ置換え */
45
43
  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>', '');
44
+
46
45
  /* 表データのタグ置換え */
47
46
  var str18 = str17.replace('<td class = "grid" style="text-align:right;vertical-align:center;border:1px solid; border-collapse:collapse;"></th>', '');
48
47
  Logger.log(str18.replace(' ',''));
@@ -82,16 +81,18 @@
82
81
 
83
82
  **<課題>**
84
83
  ①Spreadsheetの表示結果では1行ずつデータが格納されている
85
- →余分な改行やスペースが多く、見づらいので削除したい
84
+ 余分な改行やスペースが多く、見づらいので削除したい
86
85
  (対策検討)
87
- JSで改行コードを<br>に置換して
86
+ 改行コードをして改行コードを削除す方法
87
+ 下記コードを応用して改行コードを他のものに変換できるのでしょうか。
88
88
  ```JavaScript
89
+ //改行コードを<br>に置換してみる
89
90
  str.replace(/\r?\n/g, '<br>');
90
91
  ```
91
92
  ②テキスト本文の表をそのまま表示させたい
92
93
  (対策検討)
93
94
  最後のところに、「sheet.getRange(i+1,1).setValue(mail_body_split[i]);」
94
- 2行目に出したいときに、「(i+2,1)」にすれば可能でしょうか。
95
+ 2行目に出したいときに、**「(i+2,1)」**にすれば可能でしょうか。
95
96
 
96
97
  ```Google Apps Script
97
98
  /* セルにデータを追加(A1のセル) */

3

質問内容を変えました。

2017/09/11 03:29

投稿

ryuichiro
ryuichiro

スコア9

title CHANGED
@@ -1,1 +1,1 @@
1
- Gmail本文テキストから抽出したデータをSpreadSheetきれいに整理したい
1
+ Gmail本文テキストの表データをGASコピペしたい
body CHANGED
@@ -1,8 +1,8 @@
1
1
  ###前提
2
2
  ######**システム要件**:最新取得した特定Gmail本文をSpreadSheetでの情報管理を自動化
3
- **Gmail本文からテキスト抽出した情報をスクレイピングしSpreadSheetに貼り付けしたい。**
3
+ **Gmail本文からテキスト抽出した情報を抽出SpreadSheetに貼り付け**
4
4
 
5
- ▼スクリプトの流れ(ここまで実行結果が出ている)
5
+ ▼スクリプトの流れ(まで実行結果が出ている)
6
6
  ①特定の件名のメールを検索し、最新メール本文を取得
7
7
  ②シートを作成する前に、シート名をその日の「年月日」にするためのタイムスリップを取得
8
8
  ③②で取得したタイムスリップ名のシートを追加
@@ -14,34 +14,28 @@
14
14
  ```
15
15
  function getMail() {
16
16
 
17
- /* メールを検索し本文を変数に保存 */
17
+ /* メールを検索し本文を変数に保存 */
18
18
  var threads = GmailApp.search('subject:Softbank Daily Results - SIM Box Detection'); // メールを検索し一覧を取得
19
19
  var thread_top = threads[0]; // そのうちいちばん新しいメールを取得
20
20
 
21
- //var mail_body = thread_top.getMessages()[0].getPlainBody(); // <br/>タグなしの本文を取得 ※本文のHTMLテキストが表示されず
22
21
  var mail_body = thread_top.getMessages()[0].getBody(); // 本文のテキストを取得
23
- //var mail_body_split = mail_body.split(/\r\n|\r|\n/); // メールの本文を改行ごとに配列に格納
22
+
24
-
25
- /* テキストに含まれているHTMLタグを除去する */
23
+ /* テキストに含まれているHTMLタグを除去する */
26
24
  var str = mail_body;
27
25
  var str2 = str.replace(/<('[^']*'|'[^']*'|[^''>])*>/g,''); //g内の文字列を空欄に置き換え
28
26
  var str3 = str2.replace('','');
29
27
 
30
- /* HTMLテキストの前置き箇所を除外 */
28
+ /* HTMLテキストの前置き箇所を除外 */
31
- //var str4 = str3.replace('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">','');
29
+ var str4 = str3.replace('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">','');
32
- var str5 = str3.replace(/<!-- tell the browser to not use it's cache for this page -->/g ,"");
30
+ var str5 = str3.replace(/<!-- tell the browser to not use it's
33
- var str6 = str5.replace(/body {font-weight:normal; font-size:14px; background-color:#cccccc; font-family:Arial, Helvetica, sans-serif; margin:0px;}/g ,'');
34
- var str7 = str6.replace(/table.contentwithborder {border:1px solid black;border-collapse:collapse;text-align:left;vertical-align:top;}/g, '');
35
- var str8 = str7.replace(/td.grid {border:1px solid black;text-align:left;border-collapse:collapse;}/g,'');
36
- var str9 = str8.replace(/td.transposecolgrid {background-color:#f6f6f6;}/g, '');
37
- var str10 = str9.replace(/SIGOS SBD REPORTING Report/g ,'');
31
+ //※一部略
38
-
32
+
39
- /* 表の件名のみ抽出 */
33
+ /* 表の件名のみ抽出 */
40
34
  var str11 = str10.replace('<span style="color:#000080; line-height:150%; padding-left:5px"><strong></strong></span>', '');
41
- /* 表フォーマットの除外 */
35
+ /* 表フォーマットの除外 */
42
36
  var str12 = str11.replace('<table style="font-size:-12px;font-weight: normal; font-style: normal;border:1px solid; border-collapse:collapse;">' ,'');
43
37
 
44
- /* Daily test overviewの表タグを除外 */
38
+ /* Daily test overviewの表タグを除外 */
45
39
  var str13 = str12.replace('<table style="border-collapse:collapse;font-size:12px;font-weight: normal; font-style: normal;text-align:right;background-color:#f6f6f6;">' ,'');
46
40
  var str14 = str13.replace('<tr style="background-color:#ffffff;color:#000000;font-size:12px;text-align:center;vertical-align:center;">', '');
47
41
  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>', '');
@@ -52,25 +46,23 @@
52
46
  /* 表データのタグ置換え */
53
47
  var str18 = str17.replace('<td class = "grid" style="text-align:right;vertical-align:center;border:1px solid; border-collapse:collapse;"></th>', '');
54
48
  Logger.log(str18.replace(' ',''));
55
- //Logger.log(str18);
56
49
 
57
- //var mail_body_split = str18.split(/\r\n|\r|\n/); // メールの本文を改行ごとに配列に格納
58
50
  var mail_body_split = str18.split(/\r\n/); // メールの本文を改行ごとに配列に格納
59
51
 
60
- /* シート名用にタイムスタンプを取得 */
52
+ /* シート名用にタイムスタンプを取得 */
61
- var today = new Date(); // 現在のタイムスタンプを取得
53
+ var today = new Date(); // 現在のタイムスタンプを取得
62
54
  var timestamp = today.getFullYear()+"/"+(today.getMonth()+1)+"/"+today.getDate(); // タイムスタンプを整形(YYYY/MM/DD)
63
55
 
64
- /* シートを追加(シート名はタイムスタンプ */
56
+ /* シートを追加(シート名はタイムスタンプ */
65
57
  var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
66
58
  objSpreadsheet.insertSheet(timestamp);
67
59
 
68
- ![イメジ説明](a59a5a07884b042fa71f44eee31abe64.png)トの移動(上記で作成したシートに移動) */
60
+ /* シートの移動(上記で作成したシートに移動)*/
69
61
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
70
62
  var sheet = spreadsheet.getSheetByName(timestamp);
71
63
  spreadsheet.setActiveSheet(sheet);
72
64
 
73
- /* セルにデータを追加(A1のセル) */
65
+ /* セルにデータを追加(A1のセル) */
74
66
  for(var i=0; i<mail_body_split.length; i++) { // 配列のデータの数(改行の行数)だけ繰り返す
75
67
  sheet.getRange(i+1,1).setValue(mail_body_split[i]); // 1行ごとに貼り付ける(貼り付けるセルを1行ずつ下にする)
76
68
  }
@@ -82,22 +74,32 @@
82
74
  ######SpreadSheetに1列ずつ改行されたデータを表整理したい
83
75
 
84
76
  **★完成イメージ**
85
-
77
+ ![イメージ説明](97a42fd1ea35c8b502f8cd7b1d0eeb80.png)
86
78
  ###試したこと
87
-
88
79
  **実行結果**
80
+ ![イメージ説明](957f35ba5fd4e64b3ccc0fdbeaee4766.png)
89
81
 
90
- 実行結果先:SpreadSheet参照
91
82
 
92
-
93
83
  **<課題>**
84
+ ①Spreadsheetの表示結果では1行ずつデータが格納されている
94
- 余分な改行やスペースが多いので削除したい
85
+ 余分な改行やスペースが多く、見づらいので削除したい
86
+ (対策検討)
95
- 改行コードを他のものできる関数を使うべきでょうか?
87
+ JSで改行コードを<br>換してみる
96
- _ 例)replase関数
88
+ ```JavaScript
89
+ str.replace(/\r?\n/g, '<br>');
90
+ ```
97
- ②テキスト本文を表で整理して表示させたい
91
+ ②テキスト本文の表そのまま表示させたい
98
- →セルIDを指定して貼り付けできる関数を使うべきでしょうか?
92
+ (対策検討)
99
- _ 例)sheet.getRange(i+1,1) → sheet.getRange(i+2,1) ※2行目に出したいとき
93
+ 最後のところに、「sheet.getRange(i+1,1).setValue(mail_body_split[i]);」
94
+ 2行目に出したいときに、「(i+2,1)」にすれば可能でしょうか。
100
95
 
96
+ ```Google Apps Script
97
+ /* セルにデータを追加(A1のセル) */
98
+ for(var i=0; i<mail_body_split.length; i++) { // 配列のデータの数(改行の行数)だけ繰り返す
99
+ sheet.getRange(i+1,1).setValue(mail_body_split[i]); // 1行ごとに貼り付ける(貼り付けるセルを1行ずつ下にする)
100
+ }
101
+ ```
102
+
101
103
  実現可能な関数やコードについてアドバイスありましたら
102
104
  ご教示いただけますでしょうか。
103
105
 

2

情報管理の観点から一部削除

2017/09/11 03:14

投稿

ryuichiro
ryuichiro

スコア9

title CHANGED
File without changes
body CHANGED
@@ -86,8 +86,10 @@
86
86
  ###試したこと
87
87
 
88
88
  **実行結果**
89
+
89
90
  実行結果先:SpreadSheet参照
90
91
 
92
+
91
93
  **<課題>**
92
94
  ①余分な改行やスペースが多いので削除したい
93
95
  →改行コードを他のものに変換できる関数を使うべきでしょうか?

1

なし

2017/08/28 09:35

投稿

ryuichiro
ryuichiro

スコア9

title CHANGED
File without changes
body CHANGED
@@ -82,14 +82,11 @@
82
82
  ######SpreadSheetに1列ずつ改行されたデータを表整理したい
83
83
 
84
84
  **★完成イメージ**
85
- ![イメージ説明](cbee41546de6616811360d7c54d763e7.png)
86
85
 
87
86
  ###試したこと
88
87
 
89
88
  **実行結果**
90
- ![![イメージ説明](ab63f9c83aa39839d58cfcd7e0e6aa0a.png)]
91
89
  実行結果先:SpreadSheet参照
92
- <https://docs.google.com/spreadsheets/d/14aPnE4XPhKE0umTANhncOxMBHcgF5molXKec7BvPALw/edit#gid=1048866240>
93
90
 
94
91
  **<課題>**
95
92
  ①余分な改行やスペースが多いので削除したい