InDesignで複数のスウォッチの色を一括で切り替えるJavaScript

たくさんあるスウォッチの色を頻繁に切り替えたいとき、手作業や別ドキュメントからの読み込みをするのがものすごく面倒になった*1ので作りました。
ScriptUIを触ってみたかったのでCS3/CS4のみ対応です(たぶん)。動作確認はWindows XP SP3 InDesign CS4(6.0.4)でしか行っていません。

(function(){

  if ( app.documents.length == 0 ) { alert("ドキュメントが開かれていません"); return; }

  // スウォッチの設定セットをつくる
  var colorSetArr = [
    { name  : "見出し1用",
      cmyk  : [  0,100,100,  0],
      black : [  0,  0,  0,100],
      set3  : [ 20, 20, 20,100] },

    { name  : "見出し2用",
      cmyk  : [  0,  0,100,  0],
      black : [  0,  0,  0, 50],
      set3  : [ 10, 10, 10, 40] },

    { name  : "見出し3用",
      cmyk  : [100,  0,100,  0],
      black : [  0,  0,  0, 60],
      set3  : [ 10, 10, 10, 50] },

    { name  : "見出し4用",
      cmyk  : [100, 50,  0,  0],
      black : [  0,  0,  0, 70],
      set3  : [ 10, 10, 10, 60] },

    { name  : "見出し5用",
      cmyk  : [ 50,100,  0,  0],
      black : [  0,  0,  0, 60],
      set3  : [ 10, 10, 10, 50] }
  ];

  // モード識別準備
  var mode = "";

  // ダイアログの内容を作成
  var dlg = new Window("dialog", "モード選択");
  dlg.add("statictext", undefined, "どの設定に変換しますか?");
  dlg.btn1 = dlg.add("button", undefined, "カラー");
  dlg.btn2 = dlg.add("button", undefined, "モノクロ");
  dlg.btn3 = dlg.add("button", undefined, "設定3");
  dlg.btn1.onClick = function(){ mode = "cmyk"; dlg.close(); }
  dlg.btn2.onClick = function(){ mode = "black"; dlg.close(); }
  dlg.btn3.onClick = function(){ mode = "set3"; dlg.close(); }

  // ダイアログを表示
  dlg.show();

  // キャンセルされてたらここで処理終了
  if ( mode == "" ) { return; }

  var actDoc = app.activeDocument;

  // 各スウォッチの色設定をモードに応じて変更する処理
  for ( var i = 0, len = colorSetArr.length; i < len; i++ ) {
    var tmpSet = colorSetArr[i];
    try {
      var targetColor = actDoc.swatches.item(tmpSet.name);
      targetColor.colorValue = tmpSet[mode];
    } catch(e) {
      alert("スウォッチがみつかりません: " + tmpSet.name); // エラー処理(手抜き)
    }
  }
  
})();


↓↓↓

スウォッチは名前で識別しています。
処理するスウォッチの数やモードの数は増やすことができます。外部に設定ファイルを作ってそれを読み込んで……とかも考えたのですが、それはそれで面倒なので直打ちで。
設定を変更したいときに修正する箇所をもっと減らす方法はないかなあ。

2010.3.24 追記:スクリプトの38行目、「staticText」→「statictext」に修正しました。ご指摘下さったmilligrammeさん、ありがとうございました。

そういえば

今年最初のエントリでした。あけましておめでとうございます?
前回あんなことを言っておいてこの体たらくですが、一応、オンラインブックマーク等でコメントは積極的にしているのです……でも100のブクマより1のブログエントリ、という気もしています。

*1:3回くらい繰り返したあたりで(早