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

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

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

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

JavaScript

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

Q&A

解決済

2回答

4333閲覧

【GAS】文字列記述で<br>や結合を記述する手間を省きたい

nemkd12

総合スコア15

Google Apps Script

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

JavaScript

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

0グッド

0クリップ

投稿2018/11/03 02:03

前提・実現したいこと

GASで自動送信メールを送るプログラムを作成しています。
このとき、メール本文のテキスト内容を別エディタ(Googleドキュメント等)で記述することが多々あります。

この場合、

  1. テキスト作成
  2. GASのエディタ内にコピペ
  3. 改行<br> & 結合"+"の記入(後者は可読性向上のため)

といった作業工程が発生します。
(具体例として下記コードを参照してください)

上記3の作業が地味に大変で、長文になればなるほど地獄と化します。何かいいアイデアありませんでしょうか?

ペースト直後は、結合や<br>の記入が必要

作業工程2のGASエディタ内にテキストをコピペした直後の様子。文字リテラルが閉じられておらず、処置が必要。

var mailbody = 'お世話になります。 この度はお申し込み頂きありがとうございます。 決済が確認できましたら、今後のご案内をお送りさせて頂きます。 よろしくお願いします。';

結合や<br>の記入後

結合や<br>の記入作業が大変でどうにか効率化したい。

Google

1var mailbody = 'お世話になります。<br>'+ 2 'この度はお申し込み頂きありがとうございます。<br>'+ 3 '決済が確認できましたら、今後のご案内をお送りさせて頂きます。<br><br>'+ 4 'よろしくお願いします。';

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

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

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

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

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

guest

回答2

0

そもそもgas上のdocumentで使っているのになぜ「コピペ」をしないといけないのか、という風に思いました。

あらかじめ

javascript

1function copyTextFromDocument(id) { 2 return DocumentApp.openById(id).getBody().getText().replace(/\n/g,"<br>\n"); 3} 4

このようなスクリプトを別途作成しておき、

javascript

1var mailbody = copyTextFromDocument("xxxxxxxxx");

とするだけで、コピペ自体が不要になります。

-- いくつかの補足

  • documentの取得

がんばればidじゃなく、ファイル名でも取得できます。DriveAppとかで検索してみてください。ただ同じドキュメントを使い回すなら、idでいいんじゃないかと思いました。

  • <br>は本当に必要ですか?

htmlメールでは確かに必要ですが、documentで作っても改行タグしか使わないなら、htmlメールであること自体疑問です。

  • documentをhtmlにする

documentで作るなら、こういうことをして、色とか太字とかが反映できるようにしたほうがいいのではないかと思います(お試しでやるには設定が面倒なので私は試してませんが)。

投稿2018/11/03 12:18

編集2018/11/03 12:21
papinianus

総合スコア12705

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

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

papinianus

2018/11/03 12:23 編集

ちなみに、documentの本文が `拝啓 … 敬具 ` のように最後の文字の後で改行されていると"敬具<br>"となります。非表示文字とはいえ気になるかもしれません(最後で改行しなければ入りません)
nemkd12

2018/11/04 00:50

ご回答ありがとうございます!確かにこの方法だとドキュメントでの作成の場合、仰る通りコピペ不要で簡易になりますね!ご協力ありがとうございます。参考にしてみます!!htmlの件についても、詳しくアドバイスしてくださり本当に感謝です^^
guest

0

ベストアンサー

  1. はなからテキストファイルを読み込んで、改行を<br>に置換するという手があります。
  2. コピペが条件であれば、``で囲めば、+でつなぐ必要はありません。
  3. あくまで結果例のような記述にするのであれば、サクラエディタなり、ブラウザのデバッガ(javascript)なりで、次のように置換します。

javascript

1let result = `...割愛...`; 2result = result.replace(/\n/g, '<br>'); 3result = result.replace(/(<br>+)/g, "$1'\n + '"); 4result = "'" + result + "'"; 5 6// まとめるとこんな感じ 7let body = `...割愛...`; 8let result = "'" + result.replace(/\n/g, '<br>').replace(/(<br>+)/g, "$1'\n + '") + "'"; 9console.log(result);

投稿2018/11/03 05:04

編集2018/11/03 05:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

nemkd12

2018/11/03 08:16

ご回答ありがとうございます。 こちら改行をそのままにして実行すると、「文字リテラルが閉じられておりません」とのエラーメッセージが出てしまいプログラムがまず動かない状況です。スクリプトエディタ(GASエディタ)の特性のせいかもしれません。。
nemkd12

2018/11/03 09:03 編集

文字列をhtmlファイル内に記述しppnさんの置換プログラムを実行することで、無事うまくいきました!ご協力ありがとうございます。 let result = `...割愛...`; ↑この部分の文字列を新規作成したhtmlファイル内にコピペ 下記コード text.html(htmlファイル) ...割愛... sendmail.gs (GASプログラム内) var body = HtmlService.createHtmlOutputFromFile("text").getContent(); body = body.replace(/\n/g, '<br>'); 下記参照、誰かの役に立てば(「htmlメッセージの記述の仕方」欄) 参照: https://qiita.com/mistolteen/items/404c10657b1b27007a3c
退会済みユーザー

退会済みユーザー

2018/11/03 09:24 編集

エラーの件ですが、'ではなく、`を使えばよいです。shiftキー+@キーで出てくる記号を半角にしたものです。この記号にしておくと、文字列を改行しちゃって問題ないのです。ただ、インデントが崩れるのがどうかなーと思いますし、注意点などがないかは一応確認したほうが良いです。
退会済みユーザー

退会済みユーザー

2018/11/03 09:26

ちなみに、置換機能をもったページをデスクトップ上かどこかに作ってしまえば、いちいちエディタを開いて、プログラムを実行…としなくて済むので、もっと楽になります。
papinianus

2018/11/03 12:07

残念ながら現時点でgasはECMAScript2015をサポートせず、従ってテンプレートリテラルが使えません。 `はリテラルの開始・終端文字と解釈されませんので、文字列リテラルや正規表現リテラルの内部以外の場所で使うと、「無効な文字」というエラーが発生します。
退会済みユーザー

退会済みユーザー

2018/11/03 12:09

なるほどそうでしたか、ご指摘ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問