使用していないレイヤーがたくさん残っていてうっとうしいと感じるデータってあると思います。また、レイヤーはたくさん作るよりも少ない方が作業がやりやすいと思います。無駄にレイヤーを作成しているデータを見かけることが良くありますが、いざ作業しようとしたときにロックされていたら「あれ?どこのレイヤーだ?」って探さなきゃいけない。そんなときに無駄にレイヤーを作ってしまっていると該当するレイヤーを探すだけでストレスなはずです。
今回は自分の中での課題をクリアできず…
今回は未使用レイヤーを削除するスクリプトをまとめてみたのですが、自分の中での課題をクリアできませんでした。というのは、マスターオブジェクトが存在するレイヤーまで削除されてしまう、これを解決したかったのですが、できませんでした。もちろんオーバーライドされていればレイヤーは残りますが、オーバーライドされていないままだと削除されてしまいます。
先に断りを入れておくというセコい手段に
上記の課題をクリアできなかったので、まずスクリプトで処理を開始する前にアラートで断りを入れております。
画像でいうと「02」の方で「マスターオブジェクトが存在するレイヤーでもオーバーライドされていない場合は削除されてしまいます」と宣言。セコいけど解決できないので仕方ない。
あとはロックされたレイヤーや非表示レイヤーは削除の対象外としています。
実験用にレイヤーを6つ用意。スクリプトを実行すると「から01」「から02」「マスターOBJあり」が削除されます。(オーバライドされていないので)
最後に削除されたレイヤーの数を表示するようにしました。
今回のスクリプトはこんな感じです。
var doc =app.activeDocument; var layers = doc.layers; var count = 0;//削除されたレイヤーの数を最後に表示するために用意 var res = confirm("01_ロックや非表示されたレイヤーは対象外です。\r02_マスターオブジェクトが存在するレイヤーでも\r オーバーライドされていない場合は削除されてしまいます。\r\r開始しますか?"); if(res==true){ for( var i = layers.length-1; i >= 0; i--){ if(layers.length==1){ break; } if( layers.item(i).allPageItems.length == 0){ if(layers.item(i).locked==true || layers.item(i).visible==false){continue;}//ロックされたレイヤーや非表示レイヤーは削除の対象外としています layers.item(i).remove(); count += 1; } } if(count>0){ alert(count+"個のレイヤーを削除しました"); } }
「マスターページにオブジェクトが存在するレイヤーは削除しない」引き続き調査してまいりますー。