スクリプトの検索置換でのグループ内テキスト
[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();
}
}
ドキュメント全頁にわたって
一気に検索置換できる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();
}
}
}
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();
}
}
}
[9382]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:aaa 投稿日:2018/01/16 17:02:15
admiさま
ありがとうございます!解決しました。
大変助かりました!
ありがとうございます!解決しました。
大変助かりました!
[9383]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:お〜まち 投稿日:2018/01/16 17:56:52
あれ、終わっちゃったかな?
ドキュメント全体に対して検索置換でいいなら、1行で済みますよ。
//ドキュメント全体に対して
app.activeDocument.changeText();
ドキュメント全体に対して検索置換でいいなら、1行で済みますよ。
//ドキュメント全体に対して
app.activeDocument.changeText();
[9384]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:admi 投稿日:2018/01/17 10:13:06
お〜まちさま
ドキュメント全体に対して、1行でできるのですね。
勉強になりました。
ドキュメント全体に対して、1行でできるのですね。
勉強になりました。
[9386]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:お〜まち 投稿日:2018/01/17 14:31:24
反応あった! うれしい。ので少し解説します。
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に対して実行します。
「ストーリーの最後へ」に相当するものはスクリプトではありません(もしかしてあるのかも)。その代わり、段落だったり、表だったり、テキストフレームだったり、より細かい範囲で実行できることになります。
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に対して実行します。
「ストーリーの最後へ」に相当するものはスクリプトではありません(もしかしてあるのかも)。その代わり、段落だったり、表だったり、テキストフレームだったり、より細かい範囲で実行できることになります。
[9388]Re: スクリプトの検索置換でのグループ内テキスト 投稿者:admi 投稿日:2018/01/17 19:54:48
お〜まちさま
丁寧に教えていただきまして、ありがとうございました。
changeText()の理解が深まりました。
aaaさんも見ているといいですね。
丁寧に教えていただきまして、ありがとうございました。
changeText()の理解が深まりました。
aaaさんも見ているといいですね。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)