###前提
######システム要件:最新取得した特定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)」**にすれば可能でしょうか。
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}
実現可能な関数やコードについてアドバイスありましたら
ご教示いただけますでしょうか。
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー