Illustratorで特定レイヤーを削除するscript


2019/01/08 コメントで指摘をいただいた「レイヤー削除」に関する処理を追加しました。

納品のたびに「レイヤーの削除」「アートボードの削除」をやっているが、手作業だと漏れがある。
毎回の作業なので半自動化するために、レイヤーとアートボードの命名規則を作り、scriptを組む。

命名規則の例

  • 削除したいレイヤー名
    • 「抜き罫」、「図面用」
  • 削除したいアートボード名
    • 「図面用」

レイヤー名を指定して削除

行う操作の順序は以下の通り。
1. 特定のレイヤー名を検索 1
2. 検索したレイヤーのindexNumberを保存
3. indexNumberに基づいて削除

抜き罫削除.js
// 「抜き罫」レイヤー削除
removeNUKIKEI(activeDocument);
function removeNUKIKEI(docObj)
{
    var i = searchLayerNum (docObj, "抜き罫");
    if( i == -1 ){
        // 抜き罫レイヤーがないなら何もしない
    }
    else{
        var layObj = docObj.layers;
        removeLayer(layObj, i);
    }
}

// レイヤー名検索
function searchLayerNum(docObj,layName){
    layObj = docObj.layers;
    for (i=0; i<layObj.length; i++){
        if( layObj[i].name == layName ){
            return i;
        }
    }
    return -1;  // 見つからなかったら-1を返す
}

// レイヤー削除
function removeLayer(layObj, tgtNum){
        layObj[tgtNum].locked = false;
        // 非表示レイヤはremove()しようとするとエラー失敗する
        layObj[tgtNum].visible = true;
        layObj[tgtNum].remove();
    }

アートボードも名前から削除

アートボードもレイヤーと同様に名前から検索し、削除することが可能。

図面用削除.js

// 図面用アートボードとレイヤーの削除
removeDRAWING(activeDocument);
function removeDRAWING(docObj){
    var i = searchArtboardNum (docObj, "図面用");
    if( i == -1 ){
        // 図面用アートボードがないなら何もしない   
    }
    else{
        var artObj = docObj.artboards;
        artObj[i].remove();
    }

    i = searchLayerNum (docObj, "図面用");
    if( i == -1 ){
        // 図面用レイヤーがないなら何もしない
    }
    else{
        var layObj = docObj.layers;
        removeLayer(layObj, i);
    }
}
// アートボード名検索
function searchArtboardNum(docObj,artName){
    artObj = docObj.artboards;
    for (i=0; i<artObj.length; i++){
        if( artObj[i].name == artName ){
            return i;
        }
    }
    return -1;  // 見つからなかったら-1を返す
}
// レイヤー名検索
function searchLayerNum(docObj,layName){
    layObj = docObj.layers;
    for (i=0; i<layObj.length; i++){
        if( layObj[i].name == layName ){
            return i;
        }
    }
    return -1;  // 見つからなかったら-1を返す
}

// レイヤー削除
function removeLayer(layObj, tgtNum){
        layObj[tgtNum].locked = false;
        // 非表示レイヤはremove()しようとするとエラー失敗する
        layObj[tgtNum].visible = true;
        layObj[tgtNum].remove();
    }

  1. 同名のレイヤーが存在しないことが前提。同名レイヤーをまとめて削除したい場合は、indexNumberを配列に格納すれば対応できるが、そもそも同名レイヤーがあると混乱の元なので避けたほうが良い。