Skip to main content
Participating Frequently
February 12, 2023
해결됨

【ExtendScript】item object を名前で指定したい

  • February 12, 2023
  • 1 답변
  • 996 조회

いつもお世話になります。

 

標題の通り、

ExtendScript 上で、プロジェクト内のアイテムを名前で指定する方法は無いでしょうか。

 

参考ですが、layer object には、byName() メソッドがあり、このメソッド内の引数に名前を与えることでレイヤーを指定することが可能と理解しております。

同様のことを、item object でも行いたい、ということになります。

 

例えば、下記のようなプロジェクトのアイテム構成の場合、

app.project.item(5)

とインデックスで指定すれば "comp_illust" コンポジションを指定することが可能かと思います。

が、マジックナンバー的に "5" をスクリプト上で使うのは拡張性や再利用性の観点から望ましくなく、標題の方法を模索しています。

 

インデックスをマジックナンバー的に使うのが望ましくないだけなので、

「名前からインデックスに変換して、最終的な指定はインデックスを使う」、という形でも構いません (例えば、下記のようにです)。

indexCompIllust = hogeoge("comp_illust"); // なんとかして "comp_illus" アイテムのインデックスを取得する
app.project.item(indexCompIllust);

 

이 주제는 답변이 닫혔습니다.
최고의 답변: Mukaida

下記スクリプトで動作すると思います。

var n = new Array("コンポ 1") //コンポジション名
var proj = app.project;
var itms = proj.item;
var itmsLen = proj.numItems;
var curItem, myComp;
for(var i=1; i<=itmsLen; i++){
curItem = proj.item(i);
if(curItem instanceof CompItem){
if(curItem.name == n[0]){
myComp = curItem;
break;
}
}
}
alert(myComp.name);

1 답변

Community Expert
February 12, 2023

内容は確認していないのですが、下記リンクおよび、リンク先のビデオが対応する方法ではないでしょうか。
Solved: Extendscript for AE. Reference comp by NAME, not b... - Adobe Support Community - 9631301 

MukaidaCommunity Expert답변
Community Expert
February 12, 2023

下記スクリプトで動作すると思います。

var n = new Array("コンポ 1") //コンポジション名
var proj = app.project;
var itms = proj.item;
var itmsLen = proj.numItems;
var curItem, myComp;
for(var i=1; i<=itmsLen; i++){
curItem = proj.item(i);
if(curItem instanceof CompItem){
if(curItem.name == n[0]){
myComp = curItem;
break;
}
}
}
alert(myComp.name);
Participating Frequently
February 19, 2023

ありがとうございます。

やはり、ビルドインのメソッドとしては存在しなさそう、ですね。

layer object には同様のものがあるのに、なぜ item object には無いのでしょう。不思議です。


プロジェクトウィンドウのアイテムは1つの名前しか持てませんが、
レイヤーにはソース名(プロジェクトウィンドウのアイテムの名前)と
レイヤー名(ユーザーが任意に設定できる名前)があるので
byNameメソッドとしてはレイヤー名を優先的に参照するものだという認識で
layerCollectionのみのメソッドになってるのかもしれないです。
itemCollectionにあってもよさそうですけどね。