[ 掲示板に戻る ]

記事No.9386に関するスレッドです

スクリプトの検索置換でのグループ内テキスト / aaa
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();
}
}

No.9380 2018/01/16(Tue) 14:25:30
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0

Re: スクリプトの検索置換でのグループ内テキスト / admi
グループを無視する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();
}
}
}

No.9381 2018/01/16(Tue) 16:00:26
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

Re: スクリプトの検索置換でのグループ内テキスト / aaa
admiさま

ありがとうございます!解決しました。
大変助かりました!

No.9382 2018/01/16(Tue) 17:02:15
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0

Re: スクリプトの検索置換でのグループ内テキスト / お〜まち URL
あれ、終わっちゃったかな?

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

//ドキュメント全体に対して
app.activeDocument.changeText();

No.9383 2018/01/16(Tue) 17:56:52
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0

Re: スクリプトの検索置換でのグループ内テキスト / admi
お〜まちさま

ドキュメント全体に対して、1行でできるのですね。
勉強になりました。

No.9384 2018/01/17(Wed) 10:13:06
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

Re: スクリプトの検索置換でのグループ内テキスト / お〜まち URL
反応あった! うれしい。ので少し解説します。
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に対して実行します。
「ストーリーの最後へ」に相当するものはスクリプトではありません(もしかしてあるのかも)。その代わり、段落だったり、表だったり、テキストフレームだったり、より細かい範囲で実行できることになります。

No.9386 2018/01/17(Wed) 14:31:24
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0

Re: スクリプトの検索置換でのグループ内テキスト / admi
お〜まちさま

丁寧に教えていただきまして、ありがとうございました。
changeText()の理解が深まりました。
aaaさんも見ているといいですね。

No.9388 2018/01/17(Wed) 19:54:48
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36