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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google ドキュメント

Google ドキュメントは、Google社が提供している文書作成ツール。Googleアカウントがあれば無料で利用できます。ブラウザ上で文書作成を行い、複数人での同時編集がで可能。スマホやタブレットでも利用できる他、オフラインでの編集もできます。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Q&A

解決済

1回答

4327閲覧

GASでGoogleドキュメントの本文を置換する方法を教えて

S50024

総合スコア3

Google ドキュメント

Google ドキュメントは、Google社が提供している文書作成ツール。Googleアカウントがあれば無料で利用できます。ブラウザ上で文書作成を行い、複数人での同時編集がで可能。スマホやタブレットでも利用できる他、オフラインでの編集もできます。

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

0グッド

0クリップ

投稿2021/09/07 06:43

GASでGoogleドキュメントの本文中の「 」(半角スペース)「.」「?」の文字3つを置換したいです。
以下のコードを書いたのですがエラーになります。
正規表現の特殊文字なので、バックスラッシュを付けてエスケープしてみましたがうまくいきません。

const body = DocumentApp.getActiveDocument().getBody(); body.replaceText(" ", ""); body.replaceText(".", ""); body.replaceText("?", "");

ご教示頂けると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

このようなケースだと \? のようにバックスラッシュが2回必要です。
半角スペースは正規表現だと \sが使えます。

参考
https://qiita.com/ue5963/items/bd8e32ac9e6b12aa7fab

せっかく正規表現が使えるので、3つまとめて処理するコードに簡略化もできます。

GAS

1body.replaceText("[\?\.\s]", ""); //この場合は "[?. ]" でもOK 2

他のGoogleドキュメントのGASの質問に回答した際に、こちらにも応用効きそうだなと思いつき、今更ながら回答を追記。

「 」(半角スペース)「.」「?」の文字3つを改行コードに置換ですが、replaceTextでは改行コード\nへの置換は出来ないけど、別のアプローチで1文字ずつチェックしていって、該当の文字にマッチしたらその文字を削除deleteTextして、改行コードをその場所に挿入insertTextで代替が出来ますね。

こんな方法もあるってことで参考までに。

GAS

1function test0930() { 2 const body = DocumentApp.getActiveDocument().getBody(); 3 const text = body.editAsText(); 4 5 const plainText = text.getText(); 6 7 for(i=0;i<plainText.length; i++){ 8 if(plainText[i].match(/[?. ]/)){ 9 text.deleteText(i,i); 10 text.insertText(i,"\n"); 11 } 12 } 13}

投稿2021/09/07 08:03

編集2021/09/30 13:04
sawa

総合スコア3002

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

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

S50024

2021/09/07 08:41

ありがとうございます! 無事に置換できました! 一つ追加で質問してよろしいでしょうか? 置換後の文字に改行をいれたいです。 \nを指定しても、文字列「\n」がそのまま反映され、改行にはなりません。 置換で改行する方法をご存知でしたらご教示頂けると幸いです。
sawa

2021/09/07 09:47

改行は難しそうですね。通常の検索と置換なら出来るのに、試してみましたが replaceTextだとヒットしません。DocumetAppは情報少なくて、過去の stack overflow に同じような質問が1つ見つかりましたがシンプルな解決策がなさそうです。 https://stackoverflow.com/questions/37771381/eliminate-newlines-in-google-app-script-using-regex 別質問で聞いてみると知見のある方が回答してくれるかもしれません。
S50024

2021/09/07 10:23

難しいそうですね… ご丁寧にありがとうございました!
sawa

2021/09/08 02:02 編集

ご参考までに replaceText で直接bodyの改行削除は出来ませんでしたが、一度 textを取得してからなら改行コード \nが見えるので、replaceでの改行削除、その後再書き込みという処理は出来ます。 ただ、インデントや文字の装飾(色、太字、大きさ)など全てリセットされちゃういますが…。 const text = body.getText(); const reText = text.replace(/\n/g,""); body.setText(reText);
sawa

2021/09/08 02:25

今更ながら、追加の件が 改行を消したいじゃなくて 改行を追加したいだったことに気づきました。 失礼しました。。 それでも結局 replaceText で改行コードを触れないのは一緒みたいなので、text取り出してから 改行に置換して戻す(装飾はリセット)しか出来ないっぽいです。(ざっと試した感じでは) const text = body.getText(); const reText = text.replace(/[?. ]/g,"\n"); body.setText(reText);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問