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

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

ただいまの
回答率

90.38%

  • JavaScript

    21523questions

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

  • Google Apps Script

    1403questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,241

ryuichiro

score 1

前提

システム要件:最新取得した特定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行ずつデータが格納されている
→ 余分な改行やスペースが多く、見づらいので削除したい
(対策検討)
→ 改行コードを探して改行コードを削除する方法
下記コードを応用して改行コードを他のものに変換できるのでしょうか。

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


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

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

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

宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kikukiku

    2017/08/28 18:31

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

    キャンセル

  • ryuichiro

    2017/08/28 18:37

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

    キャンセル

  • ryuichiro

    2017/09/11 12:33

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

    キャンセル

回答 3

check解決した方法

0

なし        

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/28 17:37

    HTMLメールの表部分の横の項目が6つ。
    完成イメージの横の項目が8つ。
    数も合っていませんし、項目の内容も一部は一致しているように見えるのですが
    やっぱり対応関係がわかりませんでした。

    確認ですが、HTMLメールの表部分のみが、スプレッドシートに反映されればいいのですか?

    キャンセル

  • 2017/08/28 17:51

    >確認ですが、HTMLメールの表部分のみが、スプレッドシートに反映されればいいのですか?
    はい、ご認識の通りです。

    回答投稿にイメージを載せました。宜しくお願い致します。

    キャンセル

  • 2017/08/28 17:55

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

    キャンセル

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/28 18:02

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

    キャンセル

  • 2017/08/28 18:05

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

    キャンセル

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

  • ただいまの回答率 90.38%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • JavaScript

    21523questions

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

  • Google Apps Script

    1403questions

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