質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1643閲覧

Gmail本文テキストの表データをGASでコピペしたい

ryuichiro

総合スコア9

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/08/28 07:26

編集2017/09/11 03:29

###前提
######システム要件:最新取得した特定Gmail本文をSpreadSheetでの情報管理を自動化
Gmail本文からテキスト抽出した情報を抽出し、SpreadSheetに貼り付ける

▼スクリプトの流れ(⑥まで実行結果が出ている)
①特定の件名のメールを検索し、最新メール本文を取得
②シートを作成する前に、シート名をその日の「年月日」にするためのタイムスリップを取得
③②で取得したタイムスリップ名のシートを追加
④③で作成したシートをアクティブ化(セルに本文を挿入するため)
⑤④でアクティブ化されたシートに本文を挿入
⑥⑤挿入されたテキスト本文からタグを除外

↓実際のコード

function getMail() { /* メールを検索し本文を変数に保存 */ var threads = GmailApp.search('subject:Softbank Daily Results - SIM Box Detection'); // メールを検索し一覧を取得 var thread_top = threads[0]; // そのうちいちばん新しいメールを取得 var mail_body = thread_top.getMessages()[0].getBody(); // 本文のテキストを取得 /* テキストに含まれているHTMLタグを除去する */ var str = mail_body; var str2 = str.replace(/<('[^']*'|'[^']*'|[^''>])*>/g,''); //g内の文字列を空欄に置き換え var str3 = str2.replace('',''); /* HTMLテキストの前置き箇所を除外 */ var str4 = str3.replace('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',''); var str5 = str3.replace(/<!-- tell the browser to not use it's //※一部略 /* 表の件名のみ抽出 */ var str11 = str10.replace('<span style="color:#000080; line-height:150%; padding-left:5px"><strong></strong></span>', ''); /* 表フォーマットの除外 */ var str12 = str11.replace('<table style="font-size:-12px;font-weight: normal; font-style: normal;border:1px solid; border-collapse:collapse;">' ,''); /* Daily test overviewの表タグを除外 */ var str13 = str12.replace('<table style="border-collapse:collapse;font-size:12px;font-weight: normal; font-style: normal;text-align:right;background-color:#f6f6f6;">' ,''); //※一部略 /* 表項目のタグ置換え */ 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>', ''); /* 表データのタグ置換え */ var str18 = str17.replace('<td class = "grid" style="text-align:right;vertical-align:center;border:1px solid; border-collapse:collapse;"></th>', ''); Logger.log(str18.replace(' ','')); var mail_body_split = str18.split(/\r\n/); // メールの本文を改行ごとに配列に格納 /* シート名用にタイムスタンプを取得 */ var today = new Date(); // 現在のタイムスタンプを取得 var timestamp = today.getFullYear()+"/"+(today.getMonth()+1)+"/"+today.getDate(); // タイムスタンプを整形(YYYY/MM/DD) /* シートを追加(シート名はタイムスタンプ */ var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); objSpreadsheet.insertSheet(timestamp); /* シートの移動(上記で作成したシートに移動)*/ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName(timestamp); spreadsheet.setActiveSheet(sheet); /* セルにデータを追加(A1のセル) */ for(var i=0; i<mail_body_split.length; i++) { // 配列のデータの数(改行の行数)だけ繰り返す sheet.getRange(i+1,1).setValue(mail_body_split[i]); // 1行ごとに貼り付ける(貼り付けるセルを1行ずつ下にする) } }

###実現したいこと
######SpreadSheetに1列ずつ改行されたデータを表整理したい

★完成イメージ
イメージ説明
###試したこと
実行結果
イメージ説明

<課題>
①Spreadsheetの表示結果では1行ずつデータが格納されている
→ 余分な改行やスペースが多く、見づらいので削除したい
(対策検討)
→ 改行コードを探して改行コードを削除する方法
下記コードを応用して改行コードを他のものに変換できるのでしょうか。

JavaScript

1//改行コードを<br>に置換してみる 2str.replace(/\r?\n/g, '<br>');

②テキスト本文の表をそのまま表示させたい
(対策検討)
最後のところに、「sheet.getRange(i+1,1).setValue(mail_body_split[i]);」
2行目に出したいときに、**「(i+2,1)」**にすれば可能でしょうか。

Google

1/* セルにデータを追加(A1のセル) */ 2for(var i=0; i<mail_body_split.length; i++) { // 配列のデータの数(改行の行数)だけ繰り返す 3 sheet.getRange(i+1,1).setValue(mail_body_split[i]); // 1行ごとに貼り付ける(貼り付けるセルを1行ずつ下にする) 4}

実現可能な関数やコードについてアドバイスありましたら
ご教示いただけますでしょうか。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kikukiku

2017/08/28 09:31

完成イメージ内に電話番号らしき情報があるので削除すべきです。一旦もの質問そのものを削除して、質問し直してはいかがですか?
ryuichiro

2017/08/28 09:37

電話番号について情報管理の観点から削除いたしました。ご指摘ありがとうございます。質問内容についてはやり直ししておきます。
ryuichiro

2017/09/11 03:33

お疲れ様です。暫くの音沙汰なしで申し訳ございません。こちら質問内容を修正しましたので完成内容と実行結果のイメージと併せてご確認いただければ幸いです。お手数をおかけしますがよろしくお願いいたします。
guest

回答3

0

Gmail本文から抽出したい表を抜粋しました。
反映したい項目数は8項目です。

投稿2017/08/28 08:49

編集2017/08/28 09:12
ryuichiro

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kikukiku

2017/08/28 09:02

これ電話番号らしき情報が生で乗ってますが、大丈夫ですか? 変えてありますよね?
kikukiku

2017/08/28 09:05

元の質問にも良く見ると電話番号みたいな情報が載っているので、一旦削除が良いと思います。 この質問には回答しません。
guest

0

自己解決

なし        

投稿2017/08/28 08:16

編集2017/08/28 09:33
ryuichiro

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

下記の2つがわかりませんでした。
1.どんなHTMLメールの本文が返ってくるのか?
2.そのHTMLメールの本文のどの部分が、完成イメージの横の項目と対応しているのか?

投稿2017/08/28 07:43

kikukiku

総合スコア514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuichiro

2017/08/28 08:15

問い合わせの件、解決方法欄の添付画像にて完成イメージを図解してみました。 よろしくお願いいたします。
ryuichiro

2017/08/28 08:19

すみません、解決方法欄でなく回答欄にイメージ図を投函してしまいました。 ご確認いただけますでしょうか。
kikukiku

2017/08/28 08:37

HTMLメールの表部分の横の項目が6つ。 完成イメージの横の項目が8つ。 数も合っていませんし、項目の内容も一部は一致しているように見えるのですが やっぱり対応関係がわかりませんでした。 確認ですが、HTMLメールの表部分のみが、スプレッドシートに反映されればいいのですか?
ryuichiro

2017/08/28 08:51

>確認ですが、HTMLメールの表部分のみが、スプレッドシートに反映されればいいのですか? はい、ご認識の通りです。 回答投稿にイメージを載せました。宜しくお願い致します。
ryuichiro

2017/08/28 08:55

ただし、さきほど掲載した表についてはレコード数が毎日変わってくるため Gmail本文の最新情報にある対象表を全て漏れなくSpreadSheetに反映させたいです。 他に不明点ありましたらご連絡お願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問