InDesign CS6自動化作戦 (InDesign CS6 Automation Operation)

該当する文字列があるかどうか全ページに渡って調べ確認させながら置換する

■プログラム説明(ソースコード説明)
 全ページ内に特定の文字があるかどうかを調べ確認しながら置換します。prompt()を使ってユーザーに調べたい文字を入力させます。正規表現文字列も使えます。このため*や.など、そのまま入力しただけでは駄目な文字がいくつかあります。
 全ページ数はapp.activeDocument.pagesに入っているので、for()でページ数分だけ繰り返すようにします。次にページ内にあるテキストフレームの数だけ内容を読み出してmatch()で一致する文字があるかどうかを調べます。一致した場合には確認のダイアログを表示しユーザーがyesボタンを押した場合のみreplace()を使って文字列を置換します。

■ソースコード
str = prompt("調べる文字を入れて下さい(正規表現)","今日");
repStr = prompt("置き換える文字を入れて下さい","明日");
regObj = new RegExp(str,"g");
pageObj = app.activeDocument.pages;
for (i=0; i<pageObj.length; i++)
{
for (j=0; j<pageObj[i].textFrames.length; j++)
{
txt = pageObj[i].textFrames[j].contents;
result = txt.match(regObj);
if (result)
{
flag = confirm(1+i+"頁:"+txt.substr(0,8)+"...で始まるテキストフレームに該当文字がありますが、どうしますか?");
if (flag)
{
pageObj[i].textFrames[j].contents = txt.replace(regObj, repStr);
}
}
}
}


■使い方
1:あらかじめドキュメントを開いておきます。
2:スクリプトを実行します。
3:文字入力ダイアログが表示されるので調べる文字を入れます。正規表現も使えます。
4:全ページを調べ該当する文字がある場合に確認ダイアログを表示します。yesを押すと文字列を置換しnoを押すと、そのままになります。


■ポイント
 場合によってはスタイル等が崩れてしまう可能性もあります。

■実際のスクリプトをダウンロード(sample.jsx.zip)

写真素材 PIXTA