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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

Q&A

2回答

3155閲覧

Gmailの本文の改行で空白になっている列の削除

souchou

総合スコア7

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

0グッド

1クリップ

投稿2020/04/20 20:36

編集2020/04/21 10:44

### Gmailの本文の改行で空白になっている列の削除

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

Gmailの本文をスプレッドシートに送るGASを組んでいます。改行ごとに区切って次の列にしていますが、改行で空白になっている部分も等しく列に空白セルとして反映されています。 現在、必要のない文字列をreplaceで.replace('lt','')の様に置き換えているのですが、改行で空白になっている部分の削除方法がわかりません。よろしくお願いします。

該当のソースコード

function getMail() { var threads = GmailApp.search('label:"商品購入通知" is:unread ', 0, 20); var pushedMessages = getReadedData(); var newPushMessages = []; threads.forEach(function(e,i){ var messages = e.getMessages(); messages.forEach(function(m,i){ if(m.isUnread() && !pushedMessages[m.getId()]){ newPushMessages.push(m); Logger.log(m.getId()); } }); e.markRead(); Logger.log(messages[messages.length - 1].getBody()); }); if(newPushMessages.length){ newPushMessages.forEach(function(message,i){ writeSSToLastRow(message); }) recordData(newPushMessages); } } function getReadedData(){ var userProperties = PropertiesService.getUserProperties(); var readedData = userProperties.getProperties(); return readedData; } function recordData(messages){ var userProperties = PropertiesService.getUserProperties(); messages.forEach(function(m,i){ userProperties.setProperty(m.getId(), true); }); } function writeSSToLastRow(msg){ var sheet = SpreadsheetApp.getActiveSheet(); var row = sheet.getLastRow() + 1; var date = msg.getDate(); var body = msg.getBody() //↓管理に不要な文字をreplaceを使って削除します .replace('lt','') .replace('============================================================','') .replace('*FunnyBoxx Net* で商品が購入されました。','') .replace('============================================================',''); sheet.getRange(row, 1).setValue(date); // splitでどの文字で文字を区切るか、区切った文字列をresという変数に代入 var res = body.split('/\r\n|\r|\n/') // replaceで不要な文字列を削除、その後splitで改行ごとにuserという変数に代入 var user = res[0].split('\n') sheet.getRange(row, 2).setValue(user[0]); sheet.getRange(row, 3).setValue(user[1]); sheet.getRange(row, 4).setValue(user[2]); sheet.getRange(row, 5).setValue(user[3]); sheet.getRange(row, 6).setValue(user[4]); sheet.getRange(row, 7).setValue(user[5]); sheet.getRange(row, 8).setValue(user[6]); sheet.getRange(row, 9).setValue(user[7]); sheet.getRange(row, 10).setValue(user[8]); sheet.getRange(row, 11).setValue(user[9]); sheet.getRange(row, 12).setValue(user[10]); sheet.getRange(row, 13).setValue(user[11]); sheet.getRange(row, 14).setValue(user[12]); sheet.getRange(row, 15).setValue(user[13]); sheet.getRange(row, 16).setValue(user[14]); sheet.getRange(row, 17).setValue(user[15]); sheet.getRange(row, 18).setValue(user[16]); sheet.getRange(row, 19).setValue(user[17]); sheet.getRange(row, 20).setValue(user[18]); sheet.getRange(row, 21).setValue(user[19]); sheet.getRange(row, 22).setValue(user[20]); sheet.getRange(row, 23).setValue(user[21]); sheet.getRange(row, 24).setValue(user[22]); sheet.getRange(row, 25).setValue(user[23]); sheet.getRange(row, 26).setValue(user[24]); sheet.getRange(row, 27).setValue(user[25]); sheet.getRange(row, 28).setValue(user[26]); sheet.getRange(row, 29).setValue(user[27]); sheet.getRange(row, 30).setValue(user[28]); sheet.getRange(row, 31).setValue(user[29]); sheet.getRange(row, 32).setValue(user[30]); sheet.getRange(row, 33).setValue(user[31]); sheet.getRange(row, 34).setValue(user[32]); sheet.getRange(row, 35).setValue(user[33]); sheet.getRange(row, 36).setValue(user[34]); sheet.getRange(row, 37).setValue(user[35]); sheet.getRange(row, 38).setValue(user[36]); sheet.getRange(row, 39).setValue(user[37]); sheet.getRange(row, 40).setValue(user[38]); sheet.getRange(row, 41).setValue(user[39]); sheet.getRange(row, 42).setValue(user[40]); sheet.getRange(row, 43).setValue(user[41]); sheet.getRange(row, 44).setValue(user[42]); sheet.getRange(row, 45).setValue(user[43]); sheet.getRange(row, 46).setValue(user[44]); sheet.getRange(row, 47).setValue(user[45]); sheet.getRange(row, 48).setValue(user[46]); }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

javascript

1function writeSSToLastRow(msg){ 2 var sheet = SpreadsheetApp.getActiveSheet(); 3// var row = sheet.getLastRow() + 1; 4 5 var date = msg.getDate(); 6 var body = msg.getBody() 7 //↓管理に不要な文字をreplaceを使って削除します 8 .replace('lt','') 9 .replace('============================================================','') 10 .replace('*FunnyBoxx Net* で商品が購入されました。','') 11 .replace('============================================================',''); 12 13// sheet.getRange(row, 1).setValue(date); 14 15 // splitでどの文字で文字を区切るか、区切った文字列をresという変数に代入 16 var res = body.split('/\r\n|\r|\n/'); 17 18 19 // replaceで不要な文字列を削除、その後splitで改行ごとにuserという変数に代入 // このコメントはコードに合致していない 20 var user = res[0].split('\n').filter(e=>e !== ""); // res 自体が body を split したものなのに、さらに 0 番目を \n で split しているのは正しいのだろうか 21 sheet.appendRow([date,...user]); 22/* sheet.getRange(row, 2).setValue(user[0]); 23 sheet.getRange(row, 3).setValue(user[1]); 24 sheet.getRange(row, 4).setValue(user[2]); 25 sheet.getRange(row, 5).setValue(user[3]); 26 sheet.getRange(row, 6).setValue(user[4]); 27 sheet.getRange(row, 7).setValue(user[5]); 28 sheet.getRange(row, 8).setValue(user[6]); 29 sheet.getRange(row, 9).setValue(user[7]); 30 sheet.getRange(row, 10).setValue(user[8]); 31 sheet.getRange(row, 11).setValue(user[9]); 32 sheet.getRange(row, 12).setValue(user[10]); 33 sheet.getRange(row, 13).setValue(user[11]); 34 sheet.getRange(row, 14).setValue(user[12]); 35 sheet.getRange(row, 15).setValue(user[13]); 36 sheet.getRange(row, 16).setValue(user[14]); 37 sheet.getRange(row, 17).setValue(user[15]); 38 sheet.getRange(row, 18).setValue(user[16]); 39 sheet.getRange(row, 19).setValue(user[17]); 40 sheet.getRange(row, 20).setValue(user[18]); 41 sheet.getRange(row, 21).setValue(user[19]); 42 sheet.getRange(row, 22).setValue(user[20]); 43 sheet.getRange(row, 23).setValue(user[21]); 44 sheet.getRange(row, 24).setValue(user[22]); 45 sheet.getRange(row, 25).setValue(user[23]); 46 sheet.getRange(row, 26).setValue(user[24]); 47 sheet.getRange(row, 27).setValue(user[25]); 48 sheet.getRange(row, 28).setValue(user[26]); 49 sheet.getRange(row, 29).setValue(user[27]); 50 sheet.getRange(row, 30).setValue(user[28]); 51 sheet.getRange(row, 31).setValue(user[29]); 52 sheet.getRange(row, 32).setValue(user[30]); 53 sheet.getRange(row, 33).setValue(user[31]); 54 sheet.getRange(row, 34).setValue(user[32]); 55 sheet.getRange(row, 35).setValue(user[33]); 56 sheet.getRange(row, 36).setValue(user[34]); 57 sheet.getRange(row, 37).setValue(user[35]); 58 sheet.getRange(row, 38).setValue(user[36]); 59 sheet.getRange(row, 39).setValue(user[37]); 60 sheet.getRange(row, 40).setValue(user[38]); 61 sheet.getRange(row, 41).setValue(user[39]); 62 sheet.getRange(row, 42).setValue(user[40]); 63 sheet.getRange(row, 43).setValue(user[41]); 64 sheet.getRange(row, 44).setValue(user[42]); 65 sheet.getRange(row, 45).setValue(user[43]); 66 sheet.getRange(row, 46).setValue(user[44]); 67 sheet.getRange(row, 47).setValue(user[45]); 68 sheet.getRange(row, 48).setValue(user[46]);*/ 69}

投稿2020/04/26 13:27

papinianus

総合スコア12705

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

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

0

GASの質問は、Google Apps Script のタグをつけましょう。
もう1つの質問も同様です。

他の部分のコードは見てませんが、改行による 空白行の削除であれば、

GAS

1.replace(/\n\s\n/g,"\n");

で処理できませんか? 最後の g で複数あった時も対応させてます。
ただ、これだと2行連続の空白行だと残っちゃうので、そういうケースも想定されるのであれば、

GAS

1.replace(/\n\s\n/g,"\n").replace(/\n\s\n/g,"\n");

強引ですが上記のようなやり方で処理できるかと。

投稿2020/04/21 09:20

sawa

総合スコア3002

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

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

sawa

2020/04/21 13:26

あー、質問を修正されて内容をようやく理解。上記回答は見当違いですね。 たぶん、タグ付けを替えられたのでそのうちコード書いた回答が入ると思いますが、filterで配列を空白除去でよいかと。あとは lengthで長さ取得して、2次配列にして setValues。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問