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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3963閲覧

GASからhtmlの内容を追記する際に改行するにはどのようにすればよいか

omikuj1

総合スコア11

Google Apps Script

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/06/05 15:45

前提・実現したいこと

GASからHTMLメールを送付したく、
そのHTMLメールの中身に、スプレッドシートの値を集計した結果を文面に記載したいです。
スプレッドシートの値を集計し、HTMLに送るところまではできているのですが、
どのように改行すればよいかわかりません。
※単純に<br>をつけたり、\nをつけてもダメでした・・・。

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

GASからHTMLへ自動で追記した内容が改行されない。

該当のソースコード

HTML

1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 7 <body> 8 皆様<br> 9 <br> 10  お疲れ様です。<br> 11  本日の集計結果を報告します。<br> 12 <?= calcProb(); ?> 13 </body> 14</html>

GAS

1function sendMail() { 2 var body; 3 var html = HtmlService.createTemplateFromFile("mailbody").evaluate().getContent(); 4 var today = new Date(); 5 6 /* メールを送信 */ 7 GmailApp.sendEmail( 8 "hogehoge@testmail.com", //宛先 9 "本日の集計結果", //件名 10 "htmlメールが表示できませんでした", //htmlが受信できない場合の本文 11 { 12 htmlBody: html //html本文 13 } 14 ); 15} 16 17function calcProb() { 18 var allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets(); 19 var body; 20 21 /* 22 スプレッドシートの集計内容を記載し、bodyに代入するスクリプト。 23 今回の質問の趣旨ではないので、省略します。 24 */ 25 26 body += "test1行目"; //"test1行目<br>"ではうまくいきませんでした。 27 body += "test2行目"; 28 29 return body; 30}

補足

上記の例でいくと、
"test1行目"と"test2行目"で改行させたいのですが、うまく改行されません。

よろしくお願いします。

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

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

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

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

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

papinianus

2019/06/05 22:03

送信用関数で送信せずhtmlをログなどに出力してみていただけませんか?実体参照などに置き換わっていませんか?
omikuj1

2019/06/05 22:26

ご質問ありがとうございます。 確認したところ、<br>が&lt;br&gt;と置き換わっていることが判明しました。 自分でも検索したところ、おっしゃるように実体参照に置き換わっているということかと思います。 その上で初歩的な質問でしたら大変恐縮ですが、 実体参照に置き換わらないようにするにはどうすればよいでしょうか。
guest

回答2

0

ベストアンサー

関数を囲むタグのところを

<?!= と ?>

に変えてください。違いは開始タグに!を入れることです。

投稿2019/06/05 22:33

papinianus

総合スコア12705

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

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

papinianus

2019/06/05 22:35

ドキュメントでもこれはできれば避けたほうがいいとされていますが、今回のユースケースだと自分で作ったコードなので問題ないかと思います。 避けるとしたら、関数に配列で返させてテンプレート側でループを組みます
guest

0

html内にあるBRタグはしっかり改行されているんでしょうか?
本来は(バックスラッシュ)\nで改行されると思われるのですが
\nで試すとそのまま文字列として出てしまうのでしょうか?
うまくいくかはちょっと分かりませんが\nとしておいて
送信前に置換してみてはどうでしょうか

GAS

1function sendMail() { 2 var body; 3 var html = HtmlService.createTemplateFromFile("mailbody").evaluate().getContent(); 4 var today = new Date(); 5 6 var html = html.replace("\n", "<br>"); //送信前に改行コードをタグに置換 7 8 /* メールを送信 */ 9 GmailApp.sendEmail( 10 "hogehoge@testmail.com", //宛先 11 "本日の集計結果", //件名 12 "htmlメールが表示できませんでした", //htmlが受信できない場合の本文 13 { 14 htmlBody: html //html本文 15 } 16 ); 17}

もしくは置換せずに

body += "test1行目\r\n"; //"test1行目<br>"ではうまくいきませんでした。 body += "test2行目";

としてみるとか・・・。

投稿2019/06/05 16:45

mepon

総合スコア480

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

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

omikuj1

2019/06/05 17:05

ご回答ありがとうございます。 html内にあるBRタグはしっかり改行されているんでしょうか? > html内にあるBRタグはしっかり改行されています。 本来は(バックスラッシュ)\nで改行されると思われるのですが \nで試すとそのまま文字列として出てしまうのでしょうか? > ここが不思議なのですが、\nとすると文字列として表示されないのですが、改行もされません。 うまくいくかはちょっと分かりませんが\nとしておいて 送信前に置換してみてはどうでしょうか > こちらについては試してみます。
mepon

2019/06/05 17:28

環境について詳しく分からないのでなんともですが 文字列として表示されていないということであれば 改行コードが効いていると思われるので \n\n\nなど余分に改行を挿入して確かめてみるのもありですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問