スクリプトの検索置換でのグループ内テキスト

[9380]スクリプトの検索置換でのグループ内テキスト 投稿者:aaa 投稿日:2018/01/16 14:25:30
WindowsのIndesignです。よく出てくる単語修正を
ドキュメント全頁にわたって
一気に検索置換できるJavaスクリプトを作っています。

一応、単一であっても、連結してあっても
テキストフレームに対して問題なく動作するのですが、
なぜか「グループ化されたオブジェクト内のテキスト」は
無視されてしまいます。

テキストフレーム同士のグループでも、
オブジェクトフレームとテキストのグループでも、
該当する単語が含まれたテキストフレームが
何らかの形でグループ化されていると反応しないのです。

グループを解除して再度スクリプトをあてると、
きちんと動作します。

スクリプトは下記のようなものです
グループ内のテキストフレームに入ったテキストも
選ばせるような記述などがあるのでしょうか?

もしよろしければ教えてください。

//プロパティの初期化
app.findTextPreferences.findWhat = NothingEnum.nothing;
app.changeTextPreferences.changeTo = NothingEnum.nothing;

//検索オプション
app.findChangeTextOptions.caseSensitive = true;//大文字小文字を区別するかどうか
app.findChangeTextOptions.kanaSensitive = true;//カナを区別するかどうか
app.findChangeTextOptions.widthSensitive = true;//全角半角を区別するかどうか

//検索条件と置換後の文字列との設定
app.findTextPreferences.findWhat = "あああああ";
app.changeTextPreferences.changeTo = "いいいいい";
//ドキュメント全体に対して
for (var i = 0; i < app.activeDocument.pages.length; i++) {
var pageObject = app.activeDocument.pages[i];
for (var j = 0; j < pageObject.textFrames.length; j++) {
pageObject.textFrames[j].parentStory.changeText();
}
}
[9381]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:admi 投稿日:2018/01/16 16:00:26
グループを無視するallPageItemsを使えば回避できますよ。

for (var i = 0; i < app.activeDocument.pages.length; i++) {
var pageObject = app.activeDocument.pages[i];
for (var j=0; j < pageObject.allPageItems.length; j++) {
if(pageObject.allPageItems[j].constructor.name=="TextFrame"){
pageObject.allPageItems[j].parentStory.changeText();
}
}
}
admiさま

ありがとうございます!解決しました。
大変助かりました!
あれ、終わっちゃったかな?

ドキュメント全体に対して検索置換でいいなら、1行で済みますよ。

//ドキュメント全体に対して
app.activeDocument.changeText();
[9384]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:admi 投稿日:2018/01/17 10:13:06
お〜まちさま

ドキュメント全体に対して、1行でできるのですね。
勉強になりました。
反応あった! うれしい。ので少し解説します。
changeText()メソッドを持っているのは次のオブジェクトになります。
Application
Document
Story
XmlStory
Text
TextColumn
TextStyleRange
Paragraph
Line
Word
Character
InsertionPoint
XMLElement
Table
Cell
Column
Row
TextFrame
TextPath
(実際には意味のないものもありますが)

このうち図の「すべてのドキュメント」に相当するのがApplicationです。なので
app.changeText();
で実行します。
「ドキュメント」に相当するのがDocumentなので
app.activeDocument.changeText();
のようになります。
「ストーリー」に相当するのがStoryおよびXmlStoryなので
pageObject.allPageItems[j].parentStory.changeText();
などのようにStoryに対して実行します。
「ストーリーの最後へ」に相当するものはスクリプトではありません(もしかしてあるのかも)。その代わり、段落だったり、表だったり、テキストフレームだったり、より細かい範囲で実行できることになります。

attached image
[9388]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:admi 投稿日:2018/01/17 19:54:48
お〜まちさま

丁寧に教えていただきまして、ありがとうございました。
changeText()の理解が深まりました。
aaaさんも見ているといいですね。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア