Skip to main content
Participant
December 22, 2023
Answered

【Javascript】スウォッチ関連のスクリプトでエラーが出て動かない

  • December 22, 2023
  • 2 replies
  • 669 views

とあるサイトで紹介されていた以下のスクリプトなのですが、

var my_sw = app.activeDocument.swatches

function chg_col(c,m,y,k) {
  var my_col = new CMYKColor();
  my_col.cyan = c;
  my_col.magenta = m;
  my_col.yellow = y;
  my_col.black = k;
  return my_col;
}

for (i=0; i<my_sw.length; i++) {
  if (my_sw[i].name == "スミアミ") {
    my_sw[i].name = "K20";
    irokae = chg_col(0,0,0,20);
    my_sw[K20].color.spot.color = irokae;
  }
  else if (my_sw[i].name == "アカ") {
    my_sw[i].name = "M100";
    irokae = chg_col(0,100,0,0);
    my_sw[M100].color.spot.color = irokae;
  }
  else if (my_sw[i].name == "アオ") {
    my_sw[i].name = "C100";
    irokae = chg_col(100,0,0,0);
    my_sw[C100].color.spot.color = irokae;
  }
}

 

スミアミと名前をつけたスウォッチを作成して試しに実行してみると

ーーーーーーーーーーーーーーーーーーーーー

Error 2: K20 は未定義です。
Line: 16

->     my_sw[K20].color.spot.color = irokae;

ーーーーーーーーーーーーーーーーーーーーー

と表示されて、スウォッチカラーの名称は変わるのですが

色設定が変更されません。

 

環境はwindows CC2021、CC2023です。

 

動作しない原因わかりますでしょうか?

This topic has been closed for replies.
Correct answer kyosuke12345

ajabon grinsmithさんのお知り合いということで出典が分かりましたね。

しばらく更新されていないようなのでこちらで少し書き換えて動作確認してみた分も置いておきます。

これでいかがでしょうか。

main();

function main(){

  //スウォッチ設定ここから
  //変更前名称、変更後名称、変更後カラーを,(カンマ)の位置でそれぞれ合わせる
  var aBeforName = ["スミアミ","アカ","アオ"]
  var aAeforName = ["K20","M100","C100"]
  var aCngColor = [chg_col(0,0,0,20),chg_col(0,100,0,0),chg_col(100,0,0,0)]
  //スウォッチ設定ここまで

  if(documents.length ==0){
    return;
  };

  var ilen = aBeforName.length
  var my_sw = app.activeDocument.swatches
  var iswlen = my_sw.length

  for (var i=0; i<ilen; i++) {
    for (var j=0; j<iswlen; j++) {
      var sw = my_sw[j]
      if (sw.name == aBeforName[i]) {
        sw.name = aAeforName[i];
        sw.color.spot.color = aCngColor[i];
      }
    }
  }
}

function chg_col(c,m,y,k) {
  var my_col = new CMYKColor();
  my_col.cyan = c;
  my_col.magenta = m;
  my_col.yellow = y;
  my_col.black = k;
  return my_col;
}

 

2 replies

ajabon grinsmith
Community Expert
Community Expert
December 29, 2023

>とある

こちらですね。知り合いです。

http://kstation2.hatenablog.com/entry/20120831/1346420462

出先なので試せませんが、ブラケット内を

["K20"] とクォーテーション囲みすることでも動くかもしれません。

 

もう11年も前の記事だし本人もまだ現場にいるかわからないのでなんとも言えないところですが、

同じくちょっとのスクリプトを書いて公開している身としては「とある」は悲しいですねえ。

「助かりました!」でも「動きゃしねえ!」でも、反応は本人に届けてほしいかなと思います。

BOL5D6CAuthor
Participant
January 5, 2024

お答えいただきありがとうございます!

 

日頃、スクリプトを公開されている皆様には大変感謝しております。

悲しい思いをさせてしまい、ごめんなさい。

今後は出典元をはっきり表示し、質問するようにし

利用させて頂いた際には、感謝の気持ちを伝えていきたいと思います。

Inspiring
December 29, 2023

コードの記載ミスですね。
my_sw[K20]
my_sw[M100]
my_sw[C100]
ともに[]の中は[i]です。

kyosuke12345Correct answer
Inspiring
December 29, 2023

ajabon grinsmithさんのお知り合いということで出典が分かりましたね。

しばらく更新されていないようなのでこちらで少し書き換えて動作確認してみた分も置いておきます。

これでいかがでしょうか。

main();

function main(){

  //スウォッチ設定ここから
  //変更前名称、変更後名称、変更後カラーを,(カンマ)の位置でそれぞれ合わせる
  var aBeforName = ["スミアミ","アカ","アオ"]
  var aAeforName = ["K20","M100","C100"]
  var aCngColor = [chg_col(0,0,0,20),chg_col(0,100,0,0),chg_col(100,0,0,0)]
  //スウォッチ設定ここまで

  if(documents.length ==0){
    return;
  };

  var ilen = aBeforName.length
  var my_sw = app.activeDocument.swatches
  var iswlen = my_sw.length

  for (var i=0; i<ilen; i++) {
    for (var j=0; j<iswlen; j++) {
      var sw = my_sw[j]
      if (sw.name == aBeforName[i]) {
        sw.name = aAeforName[i];
        sw.color.spot.color = aCngColor[i];
      }
    }
  }
}

function chg_col(c,m,y,k) {
  var my_col = new CMYKColor();
  my_col.cyan = c;
  my_col.magenta = m;
  my_col.yellow = y;
  my_col.black = k;
  return my_col;
}

 

BOL5D6CAuthor
Participant
January 5, 2024

お答えいただきありがとうございます!

以下教えて頂いた部分修正しましたら無事動きました。

 

>my_sw[K20]
>my_sw[M100]
>my_sw[C100]
>ともに[]の中は[i]です。

 

また、書き換え分まで教えていただき、ありがとうございます!

大変助かりました!