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で複数一括置換【スタイル指定機能を追加】』(ここをクリックすると別ウインドウで開きます)では、さらに改良したものをご紹介しています。検索対象の段落スタイル・文字スタイル、置換時の文字スタイル、検索範囲をダイアログで簡単に設定できます。
一括置き換え使わせていただいており、大変重宝しています。ありがとうございます!
一点質問なのですが、
置換した情報を別レイヤーで管理したく
手作業で検索置換をした際、その後選択ツールを選択すると置換したテキストボックスを選択できるなと思い、
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();がすべてを置換に値するため?うまくいきませんでした。
こちらを実行するのは可能でしょうか?
コメントをありがとうございます。励みになります。
私こそスクリプトがいつまでも身につかずヨチヨチでお恥ずかしい限りです。
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);
}
とすると、どうでしょうか。
うまくいくといいのですが……。
https://mottainaidtp.up.seesaa.net/image/test-0503.zip
ただし、このドキュメントのようにテキストフレームが連結されている場合はいろいろ問題が生じると予想されます(置換により所属するフレームが変わってしまうケース、単語が2フレームをまたいでいるケースなど)。
こちらの複数一括置換のスクリプトに組み込んで
試したところ、バッチリ動きました!
テキストの連結は今のところなかったので問題なしでした。
これからもますます重宝して使わせていただきます。
本当にありがとうございました。
これが、選択範囲に対して実行、あるいはストーリーに対して実行というふうに選択できるとなお良いと思います。
コメントをありがとうございます。
使っていただいていることを知って、
とても嬉しいです。
これからもよろしくお願いいたします。