Practice makes Perfect !

ExtendedScript素人です。同じ境遇の方、一緒に脱素人を目指しましょう!

実験007_2022.8-1 未使用レイヤーを削除

使用していないレイヤーがたくさん残っていてうっとうしいと感じるデータってあると思います。また、レイヤーはたくさん作るよりも少ない方が作業がやりやすいと思います。無駄にレイヤーを作成しているデータを見かけることが良くありますが、いざ作業しようとしたときにロックされていたら「あれ?どこのレイヤーだ?」って探さなきゃいけない。そんなときに無駄にレイヤーを作ってしまっていると該当するレイヤーを探すだけでストレスなはずです。

今回は自分の中での課題をクリアできず…

今回は未使用レイヤーを削除するスクリプトをまとめてみたのですが、自分の中での課題をクリアできませんでした。というのは、マスターオブジェクトが存在するレイヤーまで削除されてしまう、これを解決したかったのですが、できませんでした。もちろんオーバーライドされていればレイヤーは残りますが、オーバーライドされていないままだと削除されてしまいます。

先に断りを入れておくというセコい手段に

上記の課題をクリアできなかったので、まずスクリプトで処理を開始する前にアラートで断りを入れております。
画像でいうと「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+"個のレイヤーを削除しました");
	}
}


「マスターページにオブジェクトが存在するレイヤーは削除しない」引き続き調査してまいりますー。