2016年5月17日火曜日

Google Apps Scriptを使って Googleスプレットシートのセル内連続改行を1つにしてみよう!

OS9Google Apps Scriptはほぼ触っていませんでしたが、Googleスプレットシートを割と使うようになってきたので、少しずつ触ってみようと思っています。

今回は、 Google Apps ヘルプフォーラムで質問のあった、
をチャレンジしてみたいと思います。

※正規表現について、指摘を受けたので修正(2016/5/18)

自分で関数を作る


いろいろ探すより、これぐらいなら自分で作った方が早いですよ〜
でも既存で関数ありましたけど...(後述)

ツール→スクリプトエディタを開く



と出てくるので全消しして、使われていない名前の関数名にして(ここでは trim_breakにした)、これに対して

function trim_break(target){
  // 連続する改行を1つにする
  if (target == null || target == undefined){
    return "";
  }
 
  // 改行(CRとLF両方チェック)
  return target.replace(/(\n|\r|\r\n){2}/g, "\n");
}
を入れて保存します。

関数をつかう



な感じで使います。
するとほら、下記のように連続する改行は1つにまとまりました!


既存の関数でなんとかならないの?


それをいっちゃーオシマイですよ。。でもまぁ調べたらありました。

REGEXREPLACE 関数をつかう


=REGEXREPLACE(B3,"(\n|\r|\r\n){2}","
")




ですね。関数の末尾の " と ") の間は改行してください。

付録1:改行コードについて


改行コードには、LFとCRとCR+LFの3種類あります。
UNIX系はLF、MacOS9以前は CR、Windowsは CR+LFですね。

そのためすべてに対応するためには、上記のような正規表現になります。


付録1:正規表現「(\n|\r|\r\n){2}」について


を参考させていただきました。
  • {2}:直前文字が2回繰り返された場合
  • |:OR
  • () {2}:() 内が連続2度出てきた場合
  • \r : CR改行
  • \n : LF改行
  • \r\n): CR+LF改行
となり、つまりは、LFかCRかLF+CRが二回連続続いたらという正規表現になります。

2016年5月17日 @kimipooh






0 件のコメント:

コメントを投稿