素人が作ったものなので、使ってみて何か問題が起こっても責任は取れません。
動作の正確性や安全性についても保証はできないので、使うのはあくまで自己責任でお願いします。
【使い方】
カラーモードをCMYKにし、基準にしたい色を塗ったオブジェクトを選択して、「カラーチャート作成_ALL_v8.1」スクリプトを起動する。

例)CM基準5ステップ K有
【ダウンロード】
Googleドライブです。右上のダウンロードボタンからDLしてください。
#target "illustrator" /* =============================================================== カラーチャートを作成します。 カラーモードがCMYKじゃないと動きません。 基準にしたい色を「塗り」に設定して、選択してからスクリプトを実行してください。 =============================================================== */ //選択中のオブジェクトを取得 var sel = app.activeDocument.selection; //カラーモードを確認 var colorType = sel[0].fillColor.typename if(colorType!="CMYKColor"){ alert("カラーモードがCMYKではありません"); sel = 0; } //1個を選択した場合のみ動作 if(sel.length == 1){ //ダイアログを表示 var dialog = new Window("dialog","カラーチャートを作りますか?",[0,0,220,200]); //位置、横幅、縦幅 dialog.add ("statictext", [80,5,170,50], "ステップで作成"); var steptext = dialog.add("edittext",[15,15,70,40],"2");//ステップ数 var radioCM= dialog.add("radiobutton", [10, 70, 150, 90], "CM基準"); var radioMY= dialog.add("radiobutton", [10, 90, 150, 110], "MY基準"); var radioCY= dialog.add("radiobutton", [10, 110, 150, 130], "CY基準"); radioCM.value = true; var btnOK = dialog.add("button",[10,150,80,180],"OK",{name:'ok'});//OK 左、上、右、下の位置 var btnCancel = dialog.add("button",[100,150,170,180],"cancel",{name:'cancel'});//CANCEL // Kの有無を選択するチェックボックスを追加 var checkK = dialog.add("checkbox", [10, 130, 150, 150], "Kを含める"); checkK.value = true; //キャンセルの処理 btnCancel.onClick = function(){ dialog.close(); } //OKの処理…ここから最後まで btnOK.onClick = function(){ dialog.close(); //ダイアログを閉じる //テキストを数値に変換 var steps = parseInt(steptext.text); //元の色情報を四捨五入して保存 var cColor = Math.round(sel[0].fillColor.cyan); var mColor = Math.round(sel[0].fillColor.magenta); var yColor = Math.round(sel[0].fillColor.yellow); var kColor = Math.round(sel[0].fillColor.black); var kInput =[]; //新しいA3ドキュメントを作成 //プリセットを設定 var preset = new DocumentPreset() //単位をミリで計算したほうが扱いやすいので、変換機能をつけてあげる。 var w = 297; var h = 420; var pt=25.4/72 var W=w/pt; var H=h/pt; var mW=W+20;//マージン付きワイド // プリセットオブジェクトの各プロパティに値を設定 preset.units = RulerUnits.Millimeters // 単位をミリに指定 preset.width = W // アートボードの幅 preset.height = H // アートボードの高さ preset.colorMode = DocumentColorSpace.CMYK // カラーモードをCMYKに preset.title = "カラーチャート" ; // タイトルを指定 preset.rasterResolution = DocumentRasterResolution.HighResolution; //ドキュメントのラスタライズ効果 高(300ppi) //新規ドキュメントを作成 var DOC = app.documents.addDocument("",preset) DOC.activate(); DOC.defaultStroked = false; //ドキュメントのデフォルトで線をなしに。 var ABD = DOC.artboards[DOC.artboards.getActiveArtboardIndex()]; RCT = ABD.artboardRect; //アートボードの位置 //基準となる色を置いておく var base= DOC.pathItems.rectangle(40/pt,20/pt,13/pt,13/pt); base.fillColor =sel[0].fillColor; baseT = app.activeDocument.textFrames.add(); baseT.contents = 'C='+base.fillColor.cyan.toFixed(2)+'\nM='+base.fillColor.magenta.toFixed(2)+'\nY='+base.fillColor.yellow.toFixed(2)+'\nK='+base.fillColor.black.toFixed(2); baseT.translate(40/pt,40/pt); //基準となる座標 var x1 = 50; //左 var y1 = H-100; //上 var x2 = 50+(13/pt); //右 var y2 = H-100-(13/pt); //下 var n = 7; //複製個数 var m = 2/pt; //マージン var movex = (13/pt)+m; //xの移動距離 var movey = (-13/pt)-m //yの移動距離 //移動距離用 var movez = 1; var movek = 1; //アートボード移動距離 var artB = 0; //各アートボードの基準となるチップ var OBJ = []; //上下左右に並べたい色を確認 if(radioCM.value==true){radioCK = "CM"} if(radioMY.value==true){radioCK = "MY"} if(radioCY.value==true){radioCK = "CY"} switch(radioCK){ //縦・横・ブロックの色指定 case "CM": sideColor = cColor; verColor = mColor; blockColor = yColor; sideCP = "C"; verCP = "M"; blockCP = "Y"; break; case "MY": sideColor = mColor; verColor = yColor; blockColor = cColor; sideCP = "M"; verCP = "Y"; blockCP = "C"; break; case "CY": sideColor = cColor; verColor = yColor; blockColor = mColor; sideCP = "C"; verCP = "Y"; blockCP = "M"; break; default: alert("エラー"); //念のため } //function。色を上下限内に収める var sideInputBase = colorT(sideColor,steps,3); var verInputBase = colorT(verColor,steps,3); var blockInputBase = colorT(blockColor,steps,2); var artInputBase = colorT(kColor,steps,2); var ww = -2; // artbord loop var howArt = 1; //何個目のアートボードか。 var text = []; //基準値テキスト var textK = [];//右側のKのテキスト //アートボード複製開始 N loop K var maxArtboards = checkK.value ? 5 : 1; // Kを含める場合は5、含めない場合は1 for ( N=0 ; N < maxArtboards ; N++ ) { kInput[N] = artInputBase[N]; //アートボードが必要数以上の時は新規作成しない if(howArt > app.activeDocument.artboards.length && checkK.value){ NewArt = app.activeDocument.artboards.add([ artB , H , artB+W, 0 ]); } //loop用カウントリセット movez = -50; movek = 50; //カラーチャート開始 //ブロックの複製 for(k=0; k<5; k++){ //3つめになったらブロックの行を変える。 if(k == 2){ movek = movex * n + 100 ; movez = movey - movey -50; } //縦方向への複製 for(j=0; j<n; j++){ //横方向への複製 for (i=0; i<n; i++){ //縦横ブロックの色をCMYKに入力 switch(radioCK){ case 'CM': cInput = sideInputBase[i]; mInput = verInputBase[j]; yInput = blockInputBase[k]; break; case 'MY': cInput = blockInputBase[k]; mInput = sideInputBase[i]; yInput = verInputBase[j]; break; case 'CY': cInput = sideInputBase[i]; mInput = blockInputBase[k]; yInput = verInputBase[j]; break; } //switch end //チップを書く。Y位置、X位置、大きさ dpi = DOC.pathItems.rectangle(H+movey*[j+1]+movez,(movex*[i+1]+movek)+artB,13/pt,13/pt); //色をcmykで指定 dpi.fillColor = setCMYKColor(cInput,mInput,yInput,kInput[N]); //基準となるものに線 if(cColor==cInput && mColor==mInput&&yColor==yInput&&kColor==kInput[N]){ dpi.stroked = true; dpi.strokeColor=setCMYKColor(0,0,0,50);//灰色の線 dpi.strokeWidth = 0.5/pt; // 線幅0.5mm } //基準線end } //i loop 横方向の複製 end } //j loop 縦方向の複製 end movez = movez + (movey * n) -50 ; //ブロック分の移動 } //ブロックk loop end //Kの色情報だけ先に書いておく //色情報をテキストで入力 text[N] = app.activeDocument.textFrames.add(); text[N].contents = 'C='+cColor+'/M='+mColor+'/Y='+yColor+'/K='+kInput[N]; text[N].paragraphs[0].size = 16; text[N].translate(32/pt+artB,405/pt); //右側にKの値を表示 textK[N] = app.activeDocument.textFrames.add(); textK[N].contents = 'K='+kInput[N]; textK[N].paragraphs[0].size = 20; textK[N].translate( 247/pt+artB,402/pt); //次回アートボード複製用にカウントアップしておく if(checkK.value) { artB=artB+W+20; howArt++; } //Kの値を変更するためのカウントアップ ww = ww + 1; //ブロックカウント } //for N アートボード複製 loop end //テキスト表示設定 var textBlock1 = []; //各色数値のコピー用 var textBlock2 = []; var textSide1 = []; var textSide2 = []; var textVer1 = []; var textVer2 = []; var blockText = []; var sideText = []; var verText = []; //---テキスト表示開始--- //CMYのテキスト用計算 //2桁で表示 for(E=0; E<7; E++){ verText[E] = ('00' + verInputBase[E] ).slice(-2); sideText[E] = ('00' + sideInputBase[E] ).slice(-2); blockText[E] = ('00' +blockInputBase[E] ).slice(-2); } //左下に基準値をテキスト入力 var textbase = app.activeDocument.textFrames.add(); textbase.contents = '基準値'; textbase.paragraphs[0].size = 16; textbase.translate(20/pt,65/pt); //基準値 textbase2 = app.activeDocument.textFrames.add(); textbase2.contents = 'C='+cColor+'/M='+mColor+'/Y='+yColor+'/K='+kColor; textbase2.paragraphs[0].size = 16; textbase2.translate(45/pt,65/pt); //sideのテキスト表示 var textSide = app.activeDocument.textFrames.add(); textSide.contents = sideCP + sideText[0]+' '+sideText[1]+' '+sideText[2]+' '+sideText[3]+' '+sideText[4]+' '+sideText[5]+' '+sideText[6]; textSide.paragraphs[0].size = 19 ; textSide.translate(132/pt,390/pt); textSide.paragraphs[0].paragraphAttributes.justification = Justification.RIGHT; textSide.textRange.kerning=40; //右ブロックにもコピー var textSide2 = textSide.duplicate(); textSide2.translate(123/pt,0); //verticalのテキスト表示 var textVer = app.activeDocument.textFrames.add(); textVer.contents = verCP +verText[0]+'\n'+verText[1]+'\n'+verText[2]+'\n'+verText[3]+'\n'+verText[4]+'\n'+verText[5]+'\n'+verText[6]; textVer.translate(29/pt,378/pt); //blockのテキスト表示 var textBlock1 = app.activeDocument.textFrames.add(); var textBlock2 = app.activeDocument.textFrames.add(); textBlock1.contents = blockCP +blockText[0]+'\n'+blockCP+blockText[1]; textBlock2.contents = blockCP +blockText[2]+'\n'+blockCP+blockText[3]+'\n'+blockCP+blockText[4]; textBlock1.translate(151/pt ,332/pt); textBlock2.translate(273/pt,332/pt); //テキストのサイズと位置を調整 for(E=0;E<7;E++){ //verticalの位置調整 textVer.paragraphs[E].size = 19; textVer.paragraphs[E].paragraphAttributes.justification = Justification.RIGHT; textVer.paragraphs[E].autoLeading = false; // 行間指定時はfalseにする textVer.paragraphs[E].leading = 42; //block1は2行まで if(E<2){ textBlock1.paragraphs[E].size = 19; textBlock1.paragraphs[E].paragraphAttributes.justification = Justification.RIGHT; textBlock1.paragraphs[E].autoLeading = false; // 行間指定時はfalseにする textBlock1.paragraphs[E].leading = 350; } //block2は3行まで if(E<3){ textBlock2.paragraphs[E].size = 19; textBlock2.paragraphs[E].paragraphAttributes.justification = Justification.RIGHT; textBlock2.paragraphs[E].autoLeading = false; // 行間指定時はfalseにする textBlock2.paragraphs[E].leading = 350; }//YのIF終了 }//テキスト調整loop終了 //調整済みのverticalを下ブロックにもコピー var textVer2 = textVer.duplicate(); textVer2.translate(0,-122/pt); //複製したものだけLoopで回す var textCopyCount = checkK.value ? howArt - 1 : 1; for(N=1; N < textCopyCount; N++){ //sideをコピー textSide1[N] = textSide.duplicate(); textSide2[N] = textSide2.duplicate(); textSide1[N].translate(mW*N,0); textSide2[N].translate(mW*N,0); //verticalをコピー textVer1[N] = textVer.duplicate(); textVer2[N] = textVer2.duplicate(); textVer1[N].translate(mW*N,0); textVer2[N].translate(mW*N,0); //blockをコピー textBlock1[N] = textBlock1.duplicate(); textBlock1[N].translate(mW*N,0); textBlock2[N] = textBlock2.duplicate(); textBlock2[N].translate(mW*N,0); } //text用 N loop end } //OK function end dialog.center();//ウインドウ表示位置をモニターの中心に移動 dialog.show();//作成したウインドウを表示 } else { //オブジェクトを選択しなかった場合 alert('作りたい色をCMYKで塗りにし、選択してから起動してください'); } //-----------以下、function---------------- //CMYKカラー設定 function setCMYKColor(c,m,y,k){ var tmpColor = new CMYKColor(); tmpColor.cyan = c; tmpColor.magenta = m; tmpColor.yellow = y; tmpColor.black = k; return tmpColor; }//function end //side、ver、blockの色をマイナスのぞいた配列にする function colorT(ckColor,steps,loopCount){ var inputBox=[]; //上下限超えた分を範囲内に抑える if(ckColor-steps*loopCount<=0){ //下限が0以下になるとき ckColor=ckColor-steps*loopCount; while(ckColor+steps<=0){ckColor = ckColor+ steps;} //0以上の値まで上げる }else if(ckColor+steps*loopCount>=100){ //上限が100を超えるとき ckColor = ckColor+steps*loopCount; while(ckColor-steps>=100){ckColor = ckColor- steps;} //100-stepsまで下げる }else{ //それ以外の時、通常 ckColor=ckColor-steps*loopCount; } //配列に色情報を収納 if( ckColor<0){ //0以下のとき inputBox[0]=0; for(i=1;i<loopCount*2+1;i++){inputBox[i]=ckColor+steps*i;} }else if(ckColor+steps*loopCount>100){ //100超えたら上限100にする inputBox[loopCount*2]=100; for(i=1;i<loopCount*2+1;i++){ inputBox[loopCount*2-i]=ckColor-steps*i; } }else{ //それ以外の時、通常 for(i=0;i<loopCount*2+1;i++){inputBox[i]=ckColor+steps*i;} } //end if return inputBox; }