「gas msgbox 改行」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
GAS(Google Apps Script)で、BrowserクラスのmsgBox()メソッドを使うと、メッセージボックスを表示させることができます。
このメッセージボックスで改行を行う方法を探していた方による検索です。
このあとすぐにご紹介するとおり、改行の含まれたメッセージボックスを表示すること自体は、難しいことではありません。
「gas msgbox 改行」
という検索をした方の真意はわかりませんが、以下のような可能性を私は想像しています。
Googleスプレッッドシートのセルに、改行の含まれている文字列が存在するときに、そのセル内の文字列を、改行も含んだ状態でメッセージボックスに表示させるコードを探していたのではないかと、思うのです。
改行の含まれたメッセージボックスを表示するサンプルスクリプト
Browser.msgBoxで改行を行う基本をまずは確認しておきましょう。Browser.msgBox('1行目\\n2行目');
}
上記のとおり「\\n」を使えば、Browser.msgBox()で改行が行われます。
改行も含んでセル内文字列をメッセージボックスに表示するサンプルスクリプト
で、本題です。
以下のようなスクリプトで、セル内文字列を改行も含んでメッセージボックスに表示できます。
var rng = SpreadsheetApp.getActiveRange();
var val_org = rng.getValue();
Browser.msgBox(val_org);
var val_new = val_org.split(String.fromCharCode(10)).join('\\n');
Browser.msgBox(val_new);
改行を含んだ文字列の入力されているセルを選択しておいて、上記のスクリプトを実行すると、メッセージボックスが2回表示されます。
1回目が
var val_org = rng.getValue();
Browser.msgBox(val_org);
の部分で、改行されていないメッセージボックス、
2回目が、
var val_new = val_org.split(String.fromCharCode(10)).join('\\n');
Browser.msgBox(val_new);
の部分で、セルに入力されているとおり改行されたメッセージボックスです。
セル内改行を「\\n」に置換しているのが、
「.split(String.fromCharCode(10)).join('\\n')」
です。
既にご紹介しているとおり「String.fromCharCode(10)」がセル内改行です。これを先の「\\n」に置換すればいいので、
var val_new = val_org.replace(String.fromCharCode(10), '\\n');
としてやれば良さそうですが、これではダメなケースがあります。
改行が2個以上あったときには
「.replace(String.fromCharCode(10), '\\n')」
ではダメなのです。正規表現を使わない場合、JavaScriptのString.replace()メソッドは見つかった1つ目の文字列だけを置換するためです。
すべてのセル内改行が置換されるようにしたのが、
「.split(String.fromCharCode(10)).join('\\n')」
です。
JavaScriptのString.split()メソッドは、元の文字列を引数に指定された文字を区切り文字と見なして分解した文字列の配列を返します。上記のコードの場合
「.split(String.fromCharCode(10))」
で、セル内改行コードを区切り文字とみなして配列が作られるわけです。
Array.join()メソッドは、配列の要素を一つにつなげた文字列を返します。その際に引数が指定されていれば、引数に指定された文字列を区切り文字として挿入します。上記のコードの場合
「.join('\\n')」
で、メッセージボックスの改行「\\n」を区切り文字として配列を一つの文字列にしてくれるわけです。
結果、String.split()メソッドとArray.join()メソッドをつづけて使った、
「.split(String.fromCharCode(10)).join('\\n')」
というコードで、すべてのセル内改行がメッセージボックスの改行「\\n」に置換されることになります。
正規表現が得意な方は正規表現を使っていただいて、もちろん構わないと思うのですが、私はこのsplitとjoinの合わせ技のほうがJavaScriptで置換を行う処理を理解しやすいように感じています。
最終更新日時:2019-05-22 11:21
Home » Googleスプレッドシートの使い方 » 改行を含んでセル内文字列をメッセージボックスに表示するGASスクリプト