セルのコンテンツが特定の文字列の場合に、セルの塗りを設定する

本題の前に。

Adobe Forum Realで「Illustrator CC2018で1bit TIFF画像を貼り付けて回転を掛けたら意図しないベタ部分が表示される」という相談をされた方、もし見てらっしゃったら

https://forums.adobe.com/thread/2419609

を見てください。この件はバグです。

またIllustrator CC2018には次のようなバグも発覚しています。

パスのアウトラインで始点側のパスの線端が欠ける

仕事ではCC2018はまだ使えません。CC2017を使ってください。


さて本題です。前のエントリにもありますが、Adobe Forum Realで受けた「セルのコンテンツが特定の文字列の場合に、セルの塗りを設定したい」という相談で、それを解決するスクリプトを書きました。

フォーラムで回答いただいた皆さん、ありがとうございました。これからも「アプリケーション自動化総合フォーラム」をよろしくお願いします。

で、できあがったコードについては

https://forums.adobe.com/thread/2419285

をご確認ください。(2019年9月にAdobeフォーラムがAdobeコミュニティに移行され、その際にリンク先が削除されてしまいました

今気づいたのですが、ファイル選択ダイアログでキャンセルされた時の処理が抜けてます(ダウンロードするものも同じです。そのうち直すので、ファイル選択ダイアログではキャンセルしないでください(^^;

ここでは「コードを書かれてもわからん、使い方を知りたい」という方向けに解説したいと思います。

CS6とCC2017で確認しています。

1.準備

まず、私のサイトから次のファイルをダウンロードします。

http://indesign.cs5.xyz/idjs/cellcolor.zip

これを解凍すると次のファイルができます。

  • cellcolor.jsx 既に入力が完了している場合に使うスクリプト
  • cellcolor_start.jsx 入力中に塗りを自動設定したい場合に使うスクリプト(開始)
  • cellcolor_stop.jsx 入力中に塗りを自動設定したい場合に使うスクリプト(終了)
  • sample.indd このブログで使用したサンプル(InDesign CS6)
  • sample1.txt~sample4.txt このブログで使用した設定用テキストファイル

これらのうち「cellcolor.jsx「cellcolor_start.jsx「cellcolor_stop.jsx」はスクリプトパネルから起動するので[Scripts Panel]フォルダに入れてください。

フォルダの場所が分からない人は、スクリプトパネル内「ユーザー」をクリックしてメニューから「Finderで表示」または「エクスプローラーで表示」をクリックすると開きます。

それ以外のファイルはどこにあっても構いません。

2.設定ファイルの変更

実際に使うときは先に設定ファイルを変更しておく必要があります。設定ファイルの例としてsample1.txt~sample4.txtを用意していますので、適当に名前と中身を変えてください。詳しくはサンプルを見てください(おいおい)

3.実行

A.既に入力が完了している場合

テキストフレームを選択するか、表中に文字カーソルを立てます。

テキストフレームの場合は1つだけ選択してください。そのテキストフレームの親ストーリー全体に対して実行しますので、表が複数ページにまたがっていたり、複数の表があっても全て実行します。

個別の表に対して実行したい場合は、表を選択してもよいですし、表中のどこかに文字カーソルを立っていれば実行します。

その状態でスクリプトパネルの「cellcolor.jsx」をダブルクリックしてください。

スクリプトが実行されて、設定ファイルを指定するダイアログが出ます。ここで設定ファイルを選択すれば、その情報にしたがってセルに塗りが設定されます。

B.入力中に塗りを自動設定したい場合

スクリプトパネルの「cellcolor_start.jsx」をダブルクリックしてください。設定ファイルを指定するダイアログが出ますので設定ファイルを選択してください。

あとはいつも通り入力するだけです。

止めたいときは「cellcolor_stop.jsx」のほうをダブルクリックしてください。何もメッセージが出ませんが、塗りの自動設定を終了します。

重要

塗りの自動設定を行っている最中は、別のドキュメントを開いたり閉じたりしないでください。スウォッチの情報を取得して実行していますので、ドキュメントが切り替わったときに、同じ名前のスウォッチがないとエラーになる可能性があります。

4.使用例

印刷会社の人はテキスト支給だったりするので「入力中に自動設定」を使うことはあまりないと思います。

やったみて分かったのが、セルの属性の一部のみをコピーするって結構難しいし、セルスタイルをいくつも作るのは、慣れない人でないと厳しいのかも。だったらこれもありかも知れない、ということです。

使いどころとしては次のような感じかな。

↑吹奏楽コンクールではおなじみ

↑順番よりも得点の方か一般的かな?

↑シフト表とか(InDesignで作るか?)

↑適当

ま、こんな感じで意外とあるかも。

ということで終わりなんですが、大元の質問者さんとは名刺交換してなかったような。もし見てくれたらコメントください!


12月14日 追記

設定ファイルを指定するダイアログで「キャンセル」ボタンをクリックするとエラーが出ていたのを修正し、再アップしました。すでにダウンロードされている方は、再度ダウンロードをお願いします(変更されているのは「cellcolor.jsx「cellcolor_start.jsx」の2ファイルです)

『セルのコンテンツが特定の文字列の場合に、セルの塗りを設定する』へのコメント

  1. 名前:斉藤 投稿日:2019/07/12(金) 11:15:30 ID:19ca14e23 返信

    すばらしいです。
    例えばなのですが、上のようなセルで
    金賞 海外旅行
    銀賞 高級車
    銅賞 自転車
    があるとして、海外旅行は、文字を大きく金色で
           高級車は、文字は中位の大きさで銀色で
           自転車は、文字は普通の大きさで銅色で
    というように、金賞の隣のセルの文字の書式を変えるようなscriptは作成できますか?
    そんなscript希望です。

    • 名前:お~まち 投稿日:2019/07/12(金) 11:40:36 ID:7484f1e9c 返信

      「セルの塗り」を「段落スタイル」に書き換えれば、そのセルに対しては可能ですが、「隣のセル」というのがかなり厄介ですね。条件を絞り込めばできますが、個別注文品になります。

  2. 名前:paxed 投稿日:2019/12/03(火) 17:10:19 ID:9f41039cb 返信

    とても便利です。ありがとうございます。
    質問です。
    「特定の文字列」に正規表現を使いたいのですが
    どう設定すればよいでしょうか。
    例えば極端な例で言うと
    文字列((.+?))のあるセルだけに塗りを設定するなどです。
    よろしくお願い致します。

    • 名前:お~まち 投稿日:2019/12/03(火) 17:40:28 ID:2dbe83d36 返信

      「cellcolor_start.jsx」の場合は54行目の
      if (parentObject.contents == cset[k][0]) {
      のところ、「cellcolor.jsx」の場合は96行目の
      if (ac[j].contents == cset[k][0]) {
      のところを書き換えてやる必要があります。
      今は単純に文字列同士の比較にしていますが、ここをJavaScriptの正規表現でmatchメソッドを使用したものに変更しなければなりません。
      そのためにはこの部分を(cellcolor_start.jsxの例です)
      var rex = new RegExp(cset[k][0]);
      if (parentObject.contents.match(rex) != null) {
      などとすれば定義ファイルに正規表現を使えます。

      • 名前:paxed 投稿日:2019/12/03(火) 18:50:09 ID:9f41039cb 返信

        ありがとうございます!
        スクリプトについては全くの素人なので、
        「cellcolor.jsx」の場合もどのように書き替えれば良いか
        示していただくと、とてもうれしいです。
        「cellcolor_start.jsx」と全く同じように書き換えれば良いのでしょうか?
        非礼お許し下さい。何卒よろしくお願い致します。

        • 名前:お~まち 投稿日:2019/12/03(火) 19:23:14 ID:2dbe83d36 返信

          全く同じ考え方でよいです。これを機会にスクリプトを勉強されてはいかがですか? もっといろんなことができますよ。
          なお、書き忘れてましたが、定義ファイルでの正規表現の書き方はJavaScriptの書き方(正確にはECMAScript 3の書き方)になります。InDesignで使える正規表現はこれよりも幅広い書き方がある(~Kとか)ので、そういった場合には反応しませんので注意してください。

          • 名前:paxed 投稿日:2019/12/04(水) 14:17:31 ID:31876fe33

            そうですね。でも頭がついていかないかも知れませんが、トライする価値はありますよね。
            「正規表現の書き方」にアドバイスくださり、重ねて御礼申し上げます。

  3. 名前:paxed 投稿日:2019/12/03(火) 19:19:34 ID:9f41039cb 返信

    ご報告。
    「cellcolor.jsx」上では
    parentObject.contents
    の部分を
    ac[j].contents
    に替えたところ動きました。
    処理速度は遅いですが、とても助かりました!
    因みに文字列の正規表現は「.」としています。
    ありがとうございましたm(__)m