※ここではすべてテキストフレームを親オブジェクトとしていますが、ストーリーからも同じ方法でアクセスすることができます。(ストーリーについてはテキスト関連・概要を参照)。

 

<段落単位の取得>

 

テキストフレームにある任意の段落は、paragraphsプロパティを使って取得します。返り値は常に配列になっています。

//テキストフレーム内の段落数を取得
var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var p= selObj.paragraphs; //テキストフレームに含まれるすべての段落
$.writeln ('paragraphs= '+p.length); //総段落数

 

次のようにすれば、テキストフレームにある2つ目の段落を取得することができます。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var p= selObj.paragraphs[1]; //テキストフレームにある2つ目の段落
$.writeln (p.contents);

なお上記の例は、以下のように段落が複数のテキストフレームにまたがっていても、2つ目の段落にあるすべての文字を取得することになります。また、同じく以下のように連結されたテキストフレームのうち2つ目(ここでは下のフレーム)を選択して実行した場合、そのテキストフレームには「2つ目の段落」が存在しないのでエラーが返ります。

 

<行単位の取得>

 

テキストフレームにある任意の行は、linesプロパティを使って取得します。返り値は常に配列になっています。

//テキストフレーム内の行数を取得
var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var ln= selObj.lines; //テキストフレームに含まれるすべての行
$.writeln ('lines= '+ln.length); //行数

 

次のようにすれば、テキストフレームの2行目を取得することができます。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var ln= selObj.lines[1]; //テキストフレームにある2行目
$.writeln (ln.contents);

 

また、任意の文字列を取得し、その文字列に関わる行を配列で受け取ることもできます。

var selObj= app.activeDocument.selection[0]; //行の途中、行をまたいで、などなど
$.writeln ('object type: '+selObj.constructor.name); //確認用
var lnObj= selObj.lines; //関係行取得
for (var i=0; i<lnObj.length; i++) {
    $.writeln ('line: '+(i+1));
    $.writeln (lnObj[i].contents);
}

 

<文字単位の取得>

 

テキストフレームにある任意の文字は、charactersプロパティを使って取得します。返り値は常に配列になっています。

//テキストフレーム内の文字数を取得
var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var c= selObj.characters; //テキストフレームに含まれるすべての文字
$.writeln ('characters= '+c.length); //文字数

 

次のようにすれば、範囲を決めて取得することができます。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var chs= selObj.characters; //テキストフレーム内の文字をすべて取得
var c= chs.itemByRange(0, 9); //先頭から10文字
$.writeln (c.contents);

 

<段組み単位での取得>

 

テキストフレームにある段組みの文字は、textColumnsプロパティを使って取得します。返り値は常に配列になっています。

var selObj= app.activeDocument.selection[0]; //段組みのあるテキストフレームが選択されているとして...
var clm= selObj.textColumns[1]; //2段目にあるすべての文字列
$.writeln (clm.contents);

言うまでもなく、段組みのないテキストフレームでは最初の段落しか取得できません。つまり、複数のフレームに分けて段組みが構成されている場合は使う意味がありません。

 

なお、複数のフレームに分かれて段組みを構成している場合、ストーリー経由で段組みを取得することができます。

var selObj= app.activeDocument.selection[0]; //連結されたテキストフレームのひとつが選択されているとして...
var s= selObj.parentStory; //ストーリーとして取り出す
var clm= s.textColumns[1]; //結果として2つ目のフレームに流れているテキストを取得
$.writeln (clm.contents);

 

<複合的な範囲指定>

 

上記の方法で取得するのはすべてTextオブジェクトです。そしてTextオブジェクトからは、上で説明したすべてのプロパティを参照することができます。つまり、矛盾しない条件を重ね、範囲を絞り込んで取得できるということです。

例えば以下の例では「2段落目」の「1文字目~10文字目」にある文字列を取得しています。

var selObj= app.activeDocument.selection[0]; //テキストフレームが選択されているとして...
var p= selObj.paragraphs[1]; //テキストフレームにある2つ目の段落
var chs= p.characters; //段落内の全ての文字
var c= chs.itemByRange(0, 9); //先頭から10文字
$.writeln (c.contents);

ここではコードの見た目を分かりやすくするために2段階にわけて取得(3~4行目)していますが、これは「var t= p.characters.itemByRange(0, 9);」と1行でまとめることもできます。

 

 

Joomla templates by a4joomla