2008年5月26日月曜日

【InDesign】テキストフレームを全選択

スプレッド内のテキストフレームだけを全選択するスクリプトです。
どんな場面で使用するかはわかりませんが。
...
InDesign CS2で動作確認。他のバージョンは知りません。CSやCS3でも多分動く・・・と思う。
JAVASriptなのでMac、Win両対応だと思います。Winでしか確認してないけど。

グループ化されているオブジェクトの処理に、関数「groupCheck」を作りました。もっといいやり方があるかもしれない。

InDesignスクリプトでは、グループ化されているオブジェクト群が1つのオブジェクトとされるため、グループ化されているテキストフレームがあると、そのフレームはactiveSpread.textFramesで取り出すことができません。したがってスプレッド内にグループが存在すれば、グループ毎に処理を行います。さらに多重グループ化されていたら・・・なので、グループが発見されるたびにgroupCheckを再帰的に呼び出しています。




#target InDesign

app.activeDocument.selection = null;

if (app.layoutWindows[0].activeSpread.textFrames.length > 0)
{
textITM = app.layoutWindows[0].activeSpread.textFrames;
selectFrames(textITM);
}

if (app.layoutWindows[0].activeSpread.groups.length > 0) groupCheck(app.layoutWindows[0].activeSpread.groups);


function selectFrames(itemLST)
{
var i;
for(i = 0; i < itemLST.length; i++)
{
hkITM = itemLST[i].select(SelectionOptions.addTo);
}
}


function groupCheck(itemLST)
{
var i;
for(i=0; i < itemLST.length; i++)
{
if (itemLST[i].textFrames.length > 0) selectFrames(itemLST[i].textFrames);
if (itemLST[i].groups.length > 0) groupCheck(itemLST[i].groups);
}
}


2 件のコメント:

匿名 さんのコメント...

探していたスクリプトです!!

おせわさまです。
「テキストフレームを全選択」のスクリプトを探していました。ありがとうございます。

しかし、下記のようにスクリプトをペーストしてのですが、動きませんでした。
作業環境は「Windows XP」と「InDesignCS2」です。

app.activeDocument.selection = null;
if (app.layoutWindows[0].activeSpread.textFrames.length > 0)
{
textITM = app.layoutWindows[0].activeSpread.textFrames;
selectFrames(textITM);
}
if (app.layoutWindows[0].activeSpread.groups.length > 0) groupCheck(app.layoutWindows[0].activeSpread.groups);
function selectFrames(itemLST)
{
var i;
for(i = 0; i < itemLST.length; i++)
{
hkITM = itemLST[i].select(SelectionOptions.addTo);
}
}
function groupCheck(itemLST)
{
var i;
for(i=0; i < itemLST.length; i++)
{
if (itemLST[i].textFrames.length > 0) selectFrames(itemLST[i].textFrames);
if (itemLST[i].groups.length > 0) groupCheck(itemLST[i].groups);
}
}

ご教授よろしくお願いいたします。

pokt

ギョニソ さんのコメント...

コメントありがとうございます。
コメントに書いていただいたスクリプトをそのままコピペして動作させてみましたが、きちんと動いたことを確認しました。こちらの環境もWindowsXP InDesign CS2です。
「C:\Program Files\Adobe\Adobe InDesign CS2\Presets\Scripts\」のなか(ドライブ名は違うかも)に、「○○.jsx」という名前にしたテキストファイルで置いてもらっていますよね?

具体的にどんな感じで動かないですか?