Closed21

英数字の前後に半角スペースを付与するアドオンを内部共有したい

ピン留めされたアイテム
MikiHiroakiMikiHiroaki

処理内容のイメージ(構想時点)

  1. ドキュメントの全文を取得する
  2. 文章の中に英数字がある場合、前後に半角スペースを挿入する

挿入条件

  • 以下に一致しないこと
    • 英数字が文頭
    • 英数字の前後が記号
    • 英数字の前後が句読点
    • 英数字の前後が空白

イメージ

変更前

Google CloudはGCPとも呼ばれておりYeah!、AWSと並んで有名なクラウドの一つ。

変更後

Google Cloud は GCP とも呼ばれており Yeah!、AWS と並んで有名なクラウドの一つ。
MikiHiroakiMikiHiroaki

プロジェクトは社内検証用の三木プロジェクトを利用する
ので、『GAS と Google Cloud プロジェクトを紐づけてデプロイ』から作業する

MikiHiroakiMikiHiroaki

アドオンは生えたが、アドオンのメニューとか用意しないと駄目な感じか

MikiHiroakiMikiHiroaki

あと、そもそもデプロイした後どれくらいの時間で反映されるんだろうw

MikiHiroakiMikiHiroaki

これは、まあ、出来るね

よし。正規表現だ。

function myFunction() {
  var doc = DocumentApp.getActiveDocument()
  var body = doc.getBody();
  body.replaceText("hello", "Hello");
}
MikiHiroakiMikiHiroaki
body.replaceText("[[:alnum:]]", "Hi");

これで、英数字がすべて「Hi」になった

MikiHiroakiMikiHiroaki

そもそもなんだけど
入力「App Scriptだね」

出力「App ScriptHiHiだね」
にする
のように定数じゃなくて元の値を保持したまま何かを加えるにはどうしたらいいんだ?

MikiHiroakiMikiHiroaki

行けそうな気がする

  // ドキュメントの全文を取得する
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody().getText();
  // 置換する
  var replaced = body.replace(/([a-zA-Z0-9]*\S*)/g,"test$1");

  doc.getBody().setText(replaced);
}

MikiHiroakiMikiHiroaki

・すでに空白が入っている場合に追加させない
ってことがしたい

MikiHiroakiMikiHiroaki

string.replaceさせた後に、2つ以上連続する半角スペースを1つの半角スペースに置き換えればよいのでは

  // 置換
  var replaced = body.replace(/([a-zA-Z0-9]*\S/g," $& ");
  doc.getBody().setText(replaced);
  // 連続半角スペースを削除
  var newbody = doc.getBody();
  newbody.replaceText("[ ]{2,}", " ");
MikiHiroakiMikiHiroaki

とりあえず眠気がようやく来たので離脱

成果

  • 正規表現とチョット仲良くなれた
  • GWSのアドオンデプロイ方法を完全に理解した

現時点のコード

// Add a custom menu to the active document, including a separator and a sub-menu.
function onOpen(e) {
  DocumentApp.getUi()
      .createMenu('My Menu')
      .addItem('My menu item37', 'onMenuItemSelected')
      .addSeparator()
      .addToUi();
}

// メニューバーの項目をクリックした時に実行される
function onMenuItemSelected() {
  // ドキュメントの全文を取得する
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody().getText();
  // 置換する
  var replaced = body.replace(/([a-zA-Z0-9]+)/g," $& ");
  doc.getBody().setText(replaced);
  // 2つ以上連続する半角スペースを1つにする
  var newbody = doc.getBody();
  newbody.replaceText("[ ]{2,}", " ");
}

残タスク

  • 行頭に存在している半角スペースを削除する
     - もしくは、行頭文字の場合は半角スペースを挿入させない
  • 記号の前後の場合、半角スペースを挿入しない

参考リンク

https://qiita.com/aqril_1132/items/c185c7ad84c129e5a2df

このスクラップは2024/01/11にクローズされました