Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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を配列に格納すれば対応できるが、そもそも同名レイヤーがあると混乱の元なので避けたほうが良い。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away