Closed21
英数字の前後に半角スペースを付与するアドオンを内部共有したい
ピン留めされたアイテム
処理内容のイメージ(構想時点)
- ドキュメントの全文を取得する
- 文章の中に英数字がある場合、前後に半角スペースを挿入する
挿入条件
- 以下に一致しないこと
- 英数字が文頭
- 英数字の前後が記号
- 英数字の前後が句読点
- 英数字の前後が空白
イメージ
変更前
Google CloudはGCPとも呼ばれておりYeah!、AWSと並んで有名なクラウドの一つ。
変更後
Google Cloud は GCP とも呼ばれており Yeah!、AWS と並んで有名なクラウドの一つ。
この記事参考にしてみる
プロジェクトは社内検証用の三木プロジェクトを利用する
ので、『GAS と Google Cloud プロジェクトを紐づけてデプロイ』から作業する
おお、無事にアドオンが生えた!
アドオンは生えたが、アドオンのメニューとか用意しないと駄目な感じか

ここじゃない...のか...?
なるほど、アドオンを実行させるトリガーを設定するのか
わからん。
これだと思うんだが...。
あと、そもそもデプロイした後どれくらいの時間で反映されるんだろうw
1分 くらいで反映されるらしい
クララが立ったよ!!
getUi が正解だった
// 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 item', 'onMenuItemSelected')
.addSeparator()
.addToUi();
}
くそ、また正規表現と向き合う時が来た...
分からなくなったらシンプルなところから。
これを参考に、クソシンプルな置換を試す
これは、まあ、出来るね
よし。正規表現だ。
function myFunction() {
var doc = DocumentApp.getActiveDocument()
var body = doc.getBody();
body.replaceText("hello", "Hello");
}
まずは英数字を正しく認識させよう
body.replaceText("[[:alnum:]]", "Hi");
これで、英数字がすべて「Hi」になった


そもそもなんだけど
入力「App Scriptだね」
を
出力「App ScriptHiHiだね」
にする
のように定数じゃなくて元の値を保持したまま何かを加えるにはどうしたらいいんだ?
GAS の string.replace 使えばいけるか?
行けそうな気がする
// ドキュメントの全文を取得する
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);
}

・すでに空白が入っている場合に追加させない
ってことがしたい
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,}", " ");
とりあえず眠気がようやく来たので離脱
成果
- 正規表現とチョット仲良くなれた
- 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,}", " ");
}
残タスク
- 行頭に存在している半角スペースを削除する
- もしくは、行頭文字の場合は半角スペースを挿入させない - 記号の前後の場合、半角スペースを挿入しない
参考リンク
このスクラップは2024/01/11にクローズされました