6 返信 最新の回答 日時: Jul 21, 2007 4:24 PM ユーザー:(motion)

    ID CS3でアクティブなページのtxt書き出し

    Level 1
      インデザインCS3で現在アクティブなページにあるテキスト全てを一つのテキストファイルに書き出したいと思っています。
      そして、書き出すファイル名は【ページ番号】.txtとしたいとおもいます。
      (書き出し先は c/ として)

      どなたか、このスクリプトの書き方わかる方いらっしゃらないでしょうか?サンプルスクリプトやらいろいろやってみましたが分かりません。
      jsでもvbでも結構です。

      どうぞ宜しくお願い致します。
        • 1. Re: ID CS3でアクティブなページのtxt書き出し
          Level 1
          CS3ですか……。CS3は持っていないので、CS2と同じと仮定して話をします。

          前提条件が全く分からないので、おおまかな手順としては次のようになると思います。
          1.書き込むためのテキストファイルを開きます。
          2.現在アクティブなページを取得します。
          3.そのページのテキストフレームを取得します。
          4.テキストフレームの親にあたるストーリーオブジェクトからcontentsプロパティを取り出し、1.で開いているテキストファイルに書き込みます。
          5.3.〜4.を全てのテキストフレームで行います。
          (もしテキストフレームが連結されている場合は、重複して書き出さないように注意しなければなりません)
          6.もしテキストパスがある場合はそれらも合わせて書き出す必要があります。
          7.テキストファイルを閉じます。

          これ以上細かいことは、ドキュメントの状況がどうなのか、どこでつまづいでいるのか、などが分からないと答えようがありません。また、あくまでもCS2と同じと仮定しての話なので、CS3でが らっと変わってしまっている場合は全く意味のない回答です。あしからず。
          • 2. Re: ID CS3でアクティブなページのtxt書き出し
            Level 1
            お〜まちさん早速のご返答ありがとうございます。

            スクリプトを始めたばっかりで、つまづいているどころか、どのオブジェクトがどのオブジェクトの下にあり、どんなプロパティがあるのかちんぷんかんぷんな状態です。

            お〜まちさんや流星さんのサイト、またスクリプトマニュアルを参考に、現在アクティブなテキストフレームをtxtに書き出す方法のみできました。(いろんなサンプルスクリプトのつなぎあわせで す)

            if (app.documents.length != 0){
            if (app.selection.length == 1){
            switch (app.selection[0].constructor.name){
            case "InsertionPoint":
            case "Character":
            case "Word":
            case "TextStyleRange":
            case "Line":
            case "Paragraph":
            case "TextColumn":
            case "Text":
            case "Story":
            app.selection[0].parentStory.exportFile(ExportFormat.textType,File("C:/Documents and Settings/test/デスクトップ/test.txt"));
            break;
            case "TextFrame":
            app.selection[0].parentStory.exportFile(ExportFormat.textType,File("C:/Documents and Settings/test/デスクトップ/test.txt"));
            break;
            default:
            alert("The selected object is not a text object. Select some text and try again.");
            break;
            }
            }
            else{
            alert("Please select some text and try again.");
            }
            }

            この状態から、まずファイル名を現在のアクティブページのページ番号.txtとしたいのですが、アクティブなページの取得の仕方が分かりません。

            どうぞ、よろしくお願い致します。
            • 3. Re: ID CS3でアクティブなページのtxt書き出し
              Level 1
              undefined
              • 4. Re: ID CS3でアクティブなページのtxt書き出し
                Level 1
                >アクティブなページの取得
                ActivePageというのが何処かに有ると思うので、それを呼んであげてください。
                CSだと下記のような感じで取れるみたいです。
                Set MyInDesign = CreateObject("InDesign.Application.CS_J")
                MyInDesign.ActiveWindow.ActivePage.Name
                • 5. Re: ID CS3でアクティブなページのtxt書き出し
                  Level 1
                  流星さんありがとうございます。
                  お〜まちさんやら流星さんやら私が勉強させて頂いているサイト管理者の方(私にとっては師匠的存在)からアドバイス頂きありがたいです。

                  ページ番号の取得できました。jsではこうでした。
                  app.activeWindow.activePage.name

                  これを書き出すファイル名の部分に当てはめればページ番号で書き出せるということですね。
                  ずっと
                  app.activeDocument.activePage.id
                  などとしてエラー出してました。これが分からず1日中悩んでました。ありがとうございます。

                  次に、お〜まちさんのご説明にあります。
                  開いているテキストファイルに書き込むというのはどのようにするのでしょうか?
                  • 6. Re: ID CS3でアクティブなページのtxt書き出し
                    Level 1
                    流星さん、お〜まちさん。
                    とりあえず二つのテキストフレームを選択して、ひとつのページ番号.txtに書き出すことができました。

                    var myPageName = app.activeWindow.activePage.name

                    if (app.documents.length != 0){
                    if (app.selection.length == 2){
                    switch (app.selection[0].constructor.name){
                    case "InsertionPoint":
                    case "Character":
                    case "Word":
                    case "TextStyleRange":
                    case "Line":
                    case "Paragraph":
                    case "TextColumn":
                    case "Text":
                    case "Story":
                    myFileName = "C:/Documents and Settings/test/デスクトップ/" + myPageName + ".txt";
                    myFileObject = new File(myFileName);
                    myFlag = myFileObject.open("w");
                    if(myFlag == true){
                    string1 = app.selection[0].parentStory.contents;
                    string2 = app.selection[1].parentStory.contents;
                    stringall = string2 + string1;
                    myFileObject.write(stringall);
                    }else{
                    alert("ファイルが開けませんでした。")
                    }
                    break;
                    case "TextFrame":
                    myFileName = "C:/Documents and Settings/test/デスクトップ/" + myPageName + ".txt";
                    myFileObject = new File(myFileName);
                    myFlag = myFileObject.open("w");
                    if(myFlag == true){
                    string1 = app.selection[0].parentStory.contents;
                    string2 = app.selection[1].parentStory.contents;
                    stringall = string2 + string1;
                    myFileObject.write(stringall);
                    }else{
                    alert("ファイルが開けませんでした。")
                    }
                    break;

                    default:
                    alert("The selected object is not a text object. Select some text and try again.");
                    break;
                    }
                    }
                    else{
                    alert("Please select some text and try again.");
                    }
                    }

                    いまは2つ選択して書き出すだけのスクリプトなので、次に
                    アクティブなページのテキストフレームを全て書き出す。
                    それができたら、
                    書き出したいページを選択できるダイアログをだして、それら全てをページ番号.txtとして書き出す。
                    最後に書き出したいディレクトリを選択できるようにする。
                    とステップアップしていきたいと思います。また、分からないことが出てくると思うので質問させて下さい。とりあえずがんばってみます。

                    ※どうしてこのスクリプトを作りたかったかといいますと、全ての漢字にルビを振ってある100ページ文のドキュメントがあるのですが(各ページのテキストフレームは独立していて連結していませ ん)、業務上この文章を、他の部署にテキスト形式で渡さないといけないのです。いままでインデザインからPDFに書き出しをし、それをテキスト形式に書き出ししていましたが、ルビまで一緒に書 き出されてしまい、ひとつひとつ消していくのに、大変な労力を費やしていました。
                    そこで、スクリプトに挑戦してみようと思い立った次第です。

                    今後とも、ご指導お願いします。