4 返信 最新の回答 日時: Jan 26, 2009 11:31 PM ユーザー:(aristerstrong)

    InDesignのスクリプトに関して

    Level 1
      InDesignスクリプトに関して、教えていただければとても有り難く思います。

      連結しているテキストフレームに表組みが何ページにもわたって流し込まれているドキュメントで、表組みのどの行で改ページが行われているかをスクリプト的に得る方法はありますでしょうか?

      オブジェクトをみると、連結しているテキストフレームの場合は、そこに流し込まれている表組みは、それぞれのページに属しているオブジェクトではなくて、最初の親フレームに属しているようで、 表組みの何行目で次のページにいっているかを得る方法がなさそうなのです。

      なぜ、このような質問をしたかといいますと、どの行で改ページになっているかを得ることができれば、ページの表組みの最下行にだけ特定のプロパティのセットをしたいがためなのです。

      もし、どなたかヒントを教えていただけるととても有り難いです。

      OS、スクリプト言語は問いません。

      AppleScript、JavaScript、VBどれでもわかりますのでよろしくお願いいたします。
        • 1. Re: InDesignのスクリプトに関して
          seuzo-oJiFme Level 1
          あまりスマートなやり方ではないですが、こんな感じでいかがでしょうか?
          このスクリプトを実行すると、ページの最後のrowの塗りが赤く変わります。

          //Swatchの作成
          function swatches_add(my_properties) {
          var my_swatch = false;//初期値
          var my_doc = app.activeDocument;//ターゲットドキュメントは
          //同名ならそのオブジェクトを返す
          for (i = 0; i < my_doc.swatches.length; i++) {
          if (my_doc.swatches[i].name == my_properties.name) {return my_doc.swatches[i];}
          }
          //Swatchの作成
          my_swatch = my_doc.colors.add(my_properties);
          return my_swatch;
          }

          var my_doc = app.activeDocument;
          var my_selection = my_doc.selection[0]; //tableを選択している
          var my_class =my_selection.reflect.name;
          var my_page = "";
          if(my_class == "Table") {
          var my_swatch_01 = swatches_add({name:"myred", colorValue:[0, 50, 50, 0], model:ColorModel.PROCESS, space:ColorSpace.CMYK});//スウォッチの作成
          for(var i = (my_selection.rows.length -1); i >= 0; i--) {
          var tmp_page = my_selection.rows[i].cells[0].texts[0].parentTextFrames[0].parent.name;//ノンブルの取得
          if (my_page != tmp_page) {
          my_selection.rows[i].fillColor = my_swatch_01;//セルの塗りを変更
          my_page = tmp_page;
          }
          }
          }
          • 2. Re: InDesignのスクリプトに関して
            seuzo-oJiFme Level 1
            あれ、function部分の改行がおかしくなってしまいましたね。
            こちらにもメモしてあります。
            http://d.hatena.ne.jp/seuzo/20090124/1232772222
            • 3. Re: InDesignのスクリプトに関して
              Level 1
              市川せうぞー様

              アドバイス有難うございました!

              Quarkのスクリプト時代から、どうしても記述がわからずに、行き詰ってるときなどに、せうぞー様のスクリプトを参考にさせていただき、大変お世話になりました。

              連結しているフレームに存在している表から特定したい位置を得る方法を教えていただき、本当にありがとうございます。

              実は、今回のように各ページの表の最下行の位置をとりたい…というケース以外にも、今まで各種作ってきたツールの中で、連結している表の行・セルなどの位置を得ることができなかったがために完 成間近で保留になってしまったものがいくつもありました。

              今回アドバイスいただいたことで、それらの保留になっているツールを完成させることもできます。

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

              土日は操作できるマシンにInDesignが積まれていないため、実際の動作は月曜日に試させていただきます。

              もし、よろしければ、今後ともスクリプトの記述で行き詰った際(情報がとうしても得られずに…)などに、助言などをいただけると本当に助かります。

              ありがとうざいました。

              P.S 教えたいただいたリンク先も、今後は参照させていただきます。
              • 4. Re: InDesignのスクリプトに関して
                Level 1
                市川せうぞー様

                スクリプト試させていただきました!

                アドバイスいただきまして、ありがとうございました。
                本当に助かりました。

                せうぞー様のアドバイスの仕方は、実に丁寧でアドバイスされる側からすると、本当にありがたく思います。

                スクリプト自体もわかりやすく、また、コメントもわかりやすく記述していただいてますので、とても助かります。

                今回アドバイスいただいたスクリプトのようにSwatchの作成のところのロジックなど、全体的に非常に簡潔でわかりやすく書かれていますので、スクリプトの初心者でもわかりやすく記述されて いますので、素晴らしいと思います。

                こちらの質問である連結した表の位置を得ることに対する返答も、実にわかりやすく答えていただき、聞く側の立場にたった親切な教え方をしていただきまして、本当にありがとうございました。