[InDesign] 指定文字列があるセルに色を塗る

環境:InDesign CC 15.0.1、macOS Catalina 10.15.2

InDesign の表で、指定文字列を含むセルだけに色を付けるスクリプトが公開されている。

セルのコンテンツが特定の文字列の場合に、セルの塗りを設定する | CS5
https://cs5.xyz/blog/2017/12/cellcolor.html

解説がやや分かりにくかったので、まとめ直してみる。

(1)上記サイトで collector.zip ファイルをダウンロード、解凍。

(2)InDesign のスクリプトパネルで右クリック。「Finder で表示」をクリック。

(3)1のうち以下のファイルを、2のフォルダへ入れる。InDesign を再起動。

cellcolor_start.jsx
cellcolor_stop.jsx
cellcolor.jsx

(4)以下のようなテキストファイル(設定ファイルとなる)を作成( [ と ] は除く)。[指定文字列] と [スウォッチ名] の間はタブで区切る。改行で区切って複数の指定をすることもできる。

[指定文字列] [スウォッチ名]

txt ファイルで保存し、2のフォルダへ入れる。

(5)色を付けたい表が1つの場合はその表中にカーソルを立てるか、表を選択する。表が複数の場合は、それらの表を含むテキストフレームにカーソルを立てる。

(6)スクリプトパネルで、cellcolor.jsx をダブルクリックするとダイアログが出てくるので、4の設定ファイルを指定。すると色付けが完了する。

あるいは入力をしながら色付けをすることができる。スクリプトパネルで cellcolor_start.jsx をダブルクリックするとスタートするので、表に指定文字を入力すると色が付く。スクリプトパネルの cellcolor_stop.jsx をダブルクリックして作業を終了する。(この作業中は他のドキュメントを開いたり閉じたりすると挙動がおかしくなるので避ける。)

cellcolor_start.jsx・cellcolor_stop.jsx を使う場合は、すでに入力済みのセルに対しては、カーソルを合わせるだけで色付けされる。

***

ただしこのスクリプトだと最初に設定する文字列にピッタリ合致するセルしか色付けができない。

設定ファイルに正規表現を使えれば、指定文字列を “含む” 場合に色付けができるのに・・・と思っていたら、配布サイトのコメント欄に、正規表現を使えるようにする方法が解説されていた。

cellcolor.jsx の場合、96 行目を以下のように変更する。

変更前:
if (ac[j].contents == cset[k][0]) {

変更後:
var rex = new RegExp(cset[k][0]);
if (ac[j].contents.match(rex) != null) {

cellcolor_start.jsx の場合、54 行目を以下のように変更する。

変更前:
if (parentObject.contents == cset[k][0]) {

変更後:
var rex = new RegExp(cset[k][0]);
if (parentObject.contents.match(rex) != null) {

これで指定文字に正規表現を使えるようになった。例えば、★を含むセルに色付けするには、以下のように設定すればいい。

^.*★.*$