表内の文字列の検索

[2615]表内の文字列の検索 | 投稿者:ORZ | 投稿日:2009/03/19(Thu) 17:59:37
はじめまして、失礼します。

ドキュメントの中で文字列を検索しようと
自動化大作戦のソース「文字列を検索する」
を使ってみました。
http://www.openspc2.org/book/InDesignCS2/normal/search/001/index.html

動作はしたのですが、
テキストフレーム内に配置した表のセル内にある文字列がひっかかりません。

ソースをみたところテキストフレームごとに検索していっているようですが、表内まで検索が及ぶようにするにはどうしたらよいでしょうか?

ご存じの方がいらっしゃいましたらよろしくお願いいたします。
» 1
[2617]Re: 表内の文字列の検索 | 投稿者:たけうちとおる | 投稿日:2009/03/19(Thu) 20:12:11
選択範囲を検索するようにすればヒットすると思います。
CS2のWinはVBSしか作っていないのですが
下記スクリプトを拡張子.vbsで保存すれば動くと思います。
Callはいらないかもしれません。

Call FindRep("検索文字", "置換文字")

Sub FindRep(findStr, repStr)
   Set myInDesign = CreateObject("InDesign.Application.CS2_J")
   '既存の検索環境設定を消去←※これ重要
   With myInDesign.FindPreferences
       .AppliedCharacterStyle = ""
       .AppliedParagraphStyle = ""
       .AppliedFont = ""
       .FontStyle = ""
   End With
   '置換設定をなしにする。
   With myInDesign.ChangePreferences
       .AppliedCharacterStyle = ""
       .AppliedParagraphStyle = ""
       .AppliedFont = ""
       .FontStyle = ""
   End With
   'スタイルを検索条件に入れる--今回は使わない
   '参考:mySearchDoc.CharacterStyles.Item(i).Nameで、使われている全ての文字スタイルが取得できる
   'myInDesign.FindPreferences.AppliedParagraphStyle = "00本文"
   'myInDesign.FindPreferences.AppliedCharacterStyle = "SimSun"
   'フォントを条件に入れる--今回は使わない
   'If F_Search.chk_simsun.Value = 1 Then
   '    myInDesign.FindPreferences.AppliedFont = "SimSun"
   'End If
Set myFoundItems = myInDesign.ActiveDocument.Selection(1).Search(findStr, true, true, false ,true ,repStr)
end Sub
» 2
[2618]Re: 表内の文字列の検索 | 投稿者:たけうちとおる | 投稿日:2009/03/19(Thu) 20:21:20
JavaScriptではこのように書きますね。
表を選択した状態で実行します。親フレーム選択状態でも大丈夫です。

keyword = "InDesign";
result = app.selection[0].search(keyword, false);
alert(result.length+"個見つかりました");


※さっきのVBSはどなたかのを参考に作った物です。(すいません忘れてしまいました。「お~まちさん」だったかも)この場をお借りして感謝いたします。

ちなみにAppleScriptのCS2は下記です。
http://www.adg7.com/takenote_b/2009/03/25search.html

それとCS3からは書き方が変わりますのでご注意下さい。
» 3
[2632]Re: 表内の文字列の検索 | 投稿者:ORZ | 投稿日:2009/03/23(Mon) 10:53:20
たけうちとおる様、ありがとうございました。

動作確認できました。
VBS、APSは使用したことがなく、JavaScriptを掲示していただいたので、こちらを使用させてもらいました。

自動化大作戦のWEBサンプルを見直しましたが、やはりsearchを使っていて・・・何が悪かったのか判明せずモヤモヤですが・・・


ありがとうございました。



>それとCS3からは書き方が変わりますのでご注意下さい。

そうなんですね・・・CS3対応の必要が出たらまた苦労することになりそうです。。。ありがとうございます!
» 4
[2634]Re: 表内の文字列の検索 | 投稿者:たけうちとおる | 投稿日:2009/03/23(Mon) 12:30:22
すいません
>やはりsearchを使っていて・・・何が悪かったのか判明せずモヤモヤですが・・・
keyword = "InDesign";
result = app.search(keyword, false);
alert(result.length+"個見つかりました");
でも動きますね。

この場合アプリケーションに対してsearchを行っているので
開いているドキュメント全ての検索結果になります。
下のようにactiveDocumentを入れると最前面のドキュメントのみの結果になります。

keyword = "InDesign";
result = app.activeDocument.search(keyword, false);
alert(result.length+"個見つかりました");

さらにselection[0]だと選択されているオブジェクトの1つめになります。

なので
>テキストフレーム内に配置した表のセル内にある文字列がひっかかりません。
がちょっとわからないのですが、activeDocumentでも駄目でしょうか?
» 5
[2636]Re: 表内の文字列の検索 | 投稿者:PsychoCat | 投稿日:2009/03/23(Mon) 15:04:45
ORZさんに質問なんですが、
ひょっとして、文字列検索でマッチする文字列、もしくはその文字列を含むセルのオブジェクトの参照を得たいのではないですか?

つまり、文字列検索してヒットしたセルの景色を変更するとか、そのセルを含むテーブル、さらにその上の階層のテーブルとかテキストフレームをコントロールしようとされているのではないですか?

私はその参照を得ようとした時に、searchコマンドでは得られないとあきらめ、別の方法を使いました。
searchコマンドでもリファレンスはゲットできるものなのでしょうか?
» 6
[2642]Re: 表内の文字列の検索 | 投稿者:PsychoCat | 投稿日:2009/03/24(Tue) 11:12:30
自己レスです。

ごめんなさい。searchコマンドでもできましたね。AppleScriptの場合ですが。

tell application "Adobe InDesign CS2_J"
   set find preferences to nothing
   set change preferences to nothing
   tell active document
       set the_text_refs to search for "hoge"
       set a_ref to item 1 of the_text_refs
       select parent of a_ref
   end tell
end tell

グループ化されたオブジェクトの1つのテキストフレーム中の表セル内の文字を検索して、そのセルをセレクトしたことを確認できました。    

となると、やはり
>テキストフレーム内に配置した表のセル内にある文字列がひっかかりません。
の原因がわかりませんね。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア