2016年11月25日

JavaScriptで複数一括置換【改良版】

DTP作業者にとっての難易度 ★☆☆☆☆(1)

※複数一括置換スクリプト(新)で小数点第二位を四捨五入する(2020年03月10日公開)ではさらに改良した(シンプルな)スクリプトを公開しています。併せてご覧ください。


2013年の9月に『複数の置換を一気に実行する』で、複数の用語を一括置換する方法について書きました。この中の『Excelと簡単なJavaScriptで複数の検索を実行する』ではInDesign上で複数一括置換をおこなうJavaScriptをご紹介したのですが、Excelを使った作業が必要となるため少々面倒だと感じていました。
そこで今回は、このJavaScriptを改良することにしました。置換リスト(置換テーブル)としてはJavaScriptファイルとは別に保存したテキストファイルを使用します。テキストファイルには「検索文字列」「タブ」「置換文字列」の形で置換リストを書いておいてください。正規表現も使用できます(InDesignのダイアログに入力するのと同じ書き方をすればOKです)。
以下、作業手順については動画をご覧ください。

JavaScriptファイルを書き替えることなく、さまざまな置換リストを使用できるので便利になったと思います。機会がありましたらお試しください。

※お試しになる際は事前によくテストをされるようお願いします。また、かならずバックアップをとってからご使用ください。


サンプルデータはこちら《2024_1210c_minimum.zip》です。

※2017.6.9にアップした別ページ『JavaScriptで複数一括置換【スタイル指定機能を追加】』(ここをクリックすると別ウインドウで開きます)では、さらに改良したものをご紹介しています。検索対象の段落スタイル・文字スタイル、置換時の文字スタイル、検索範囲をダイアログで簡単に設定できます。

posted by 照山裕爾 at 03:53| Comment(10) | TrackBack(0) | InDesign-検索/置換 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
初めまして。スクリプト初心者です。
一括置き換え使わせていただいており、大変重宝しています。ありがとうございます!


一点質問なのですが、
置換した情報を別レイヤーで管理したく
手作業で検索置換をした際、その後選択ツールを選択すると置換したテキストボックスを選択できるなと思い、
app.menuActions.item('$ID/Selection Tool').invoke();
selObj = app.activeDocument.selection;
var myLayer = app.documents.item(0).layers.item("レイヤー 2")
for (var i=0;i<selObj.length;i++){
selObj[i].move(myLayer);
}
上記のような〈選択ツール→別レイヤーに移動〉の
コードを付け加えたのですが
app.changeGrep();がすべてを置換に値するため?うまくいきませんでした。

こちらを実行するのは可能でしょうか?
Posted by take at 2017年04月28日 17:33
takeさま

コメントをありがとうございます。励みになります。
私こそスクリプトがいつまでも身につかずヨチヨチでお恥ずかしい限りです。
takeさまがお書きになった1行目のようなものは使ったことがなく
「この方法でツールが切り替えられるのか」と勉強になりました。

さて、お問い合せの件を少し試してみました。
var doc = app.documents[0] ;
var myLayer = app.documents.item(0).layers.item("レイヤー 2");
var gr=doc.changeGrep();
var grl=gr.length;
for (i=0; i<grl; i++) {
gr[i].parentTextFrames[0].move(myLayer);
}
とすると、どうでしょうか。
うまくいくといいのですが……。
Posted by 照山裕爾 at 2017年05月04日 00:33
サンプルファイルをアップしました。
https://mottainaidtp.up.seesaa.net/image/test-0503.zip
ただし、このドキュメントのようにテキストフレームが連結されている場合はいろいろ問題が生じると予想されます(置換により所属するフレームが変わってしまうケース、単語が2フレームをまたいでいるケースなど)。
Posted by 照山裕爾 at 2017年05月04日 00:45
ご返信ありがとうございます。

こちらの複数一括置換のスクリプトに組み込んで
試したところ、バッチリ動きました!
テキストの連結は今のところなかったので問題なしでした。

これからもますます重宝して使わせていただきます。
本当にありがとうございました。
Posted by take at 2017年05月08日 17:07
たいへん便利で感謝しています。
これが、選択範囲に対して実行、あるいはストーリーに対して実行というふうに選択できるとなお良いと思います。
Posted by 金光敏博 at 2025年02月22日 17:30
失礼しました。上記の点、「2020/03/14更新」で実現されているのですね。素晴らしい!
Posted by 金光敏博 at 2025年02月22日 17:33
金光敏博さま
コメントをありがとうございます。
使っていただいていることを知って、
とても嬉しいです。
これからもよろしくお願いいたします。
Posted by 照山裕爾 at 2025年02月22日 19:49
名簿の外字(異体字)の置換に利用させてもらってます。
とても助かってます。
高1→�� 吉1→&#134071; 等は変換できますが
崎1→崎(立崎)Unicode2550Eがうまく置換できません
Unicodeで指定して入れる事はできませんか?
またイラレで作字した文字を画像扱いで入れる事はできませんでしょうか?
今は正規表現で一字づつ置換してます。
Posted by 橋本聖吾 at 2026年07月09日 16:47
橋本聖吾さま
ブログをご覧いただきありがとうございます。

置換文字列を
\x{02550E}
と指定してもうまくいきませんでしょうか。
Posted by 照山裕爾 at 2026年07月10日 01:48
作字した文字を画像扱いで入れる事……につきましては
少なくともこのスクリプトでは難しいと思います。

私であればIllustratorで作字したものを
そのままInDesign上で使用するのではなく
Glyphsでフォントにした上で使うのではないかと思います。

昨今では他にもフォント作成ツールはあるようなので
作字するような案件が多いのでしたら
お試しになってもいいように思います。
具体的なコメントではなく申し訳ありません。
Posted by 照山裕爾 at 2026年07月10日 02:59
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。