【InDesign】スクリプトのメモ(現在操作しているinddファイルの名前/ファイルパスを取得する) | Blue-Scre{7}n.net | よそいちのDTPメモ

トップページ » InDesign » 【InDesign】スクリプトのメモ(現在操作しているinddファイルの名前/ファイルパスを取得する)

【InDesign】スクリプトのメモ(現在操作しているinddファイルの名前/ファイルパスを取得する)

公開日:2017年3月10日 

 最近作業手順の棚卸しをしていて、「ファイルの保存」が流れを滞らせている要因となっていることがわかったので、コレを解消すべくスクリプトをいじっています。その中から忘れがちだった処理をメモ。

1.現在操作しているinddファイルの名前を取得

//現在操作しているInDesignファイルの名前
var FileObj=app.activeDocument.name;
  result = FileObj.indexOf(".");
  inddname = FileObj.substr(0, result);
alert(FileObj);//拡張子あり
alert(inddname);//拡張子なし

 「app.activeDocument.name」でファイル名を取得します。拡張子をつけたままならこの行で処理は完了です。

 ただ、他の形式で書き出すときなど、拡張子つきのままでは使いづらいので、3行目の「indexOf(“.”);」で拡張子が始まる前までの文字数をカウントし、4行目の「substr(0, result);」でその文字列を抜き出します。

 substrの()内は「(開始位置,終了位置)」を示しています。作例の場合、resultに3行目でカウントされた文字数が入っているので、その文字数が終了位置となります。最後にalertで拡張子ありと拡張子なしのファイル名を表示して動作終了です。

1’.拡張子の前に「 . 」が来るファイル名対策

//現在操作しているInDesignファイルの名前
var FileObj=app.activeDocument.name;
var Filecount=FileObj.length;//ファイル文字数取得
//拡張子なし版を取得。拡張子の前に「 . 」が来るファイル名対策
var FileObjrev = FileObj.split("").reverse().join("");//ファイル名文字列反転
  result = FileObjrev.indexOf(".");//拡張子が先頭に来るので、最初のドットまでの文字数を取得できる
  var inddname = FileObj.substr(0, Filecount-result-1);//ファイル名文字数-拡張子文字数-ドットの位置を終了位置にしてファイル名全体から文字列切り出し
alert(FileObj);//拡張子あり
alert(inddname);//拡張子なし

 何らかの理由で、「001.005.006.009.indd」のように、拡張子より前に「.」が入るファイル名があったとします。

 「1.現在操作しているinddファイルの名前を取得」では、例示したファイル名では「001」を取得してしまい、拡張子がない場合のファイル名を正しく取得できません。

 対策として、ファイル名をスクリプト6行目の「.split(“”)」で一文字ずつ分解し、「.reverse()」で反転、「.join(“”)」で再度結合し、先頭に拡張子が来る文字列を取得します。

 以降の流れは「1.」とほぼ同じです。3行目であらかじめファイル名全体の文字数を求めておいて、substrで切り出します。この際、substrの終了位置は「ファイル名文字数全体-拡張子の文字数-ドット」にしておきます。

InDesignの場合は、「.indd」と5文字のため、substrの終了位置を「ファイル名文字数全体-5」でもいいんですが、このスクリプトはIllustratorのファイル名取得にも使用可能なので、「拡張子の文字数」を取得するようにしています。

2.現在操作しているinddファイルのパスを取得する

//現在操作しているinddファイルのファイルパス取得
var DocPath = app.activeDocument.filePath;
var DocPathdec =decodeURI(DocPath);//パスを読めるように変換
alert(DocPathdec);

 2行目の「app.activeDocument.filePath;」でファイルパスを取得できます。

 フォルダ名、ファイル名に日本語を使っていると、2行目の記述だけでは「%E9%~」のようにエンコードされてパス名が表示されてしまいます。それを3行目の「decodeURI(DocPath);」で読めるように復号します。

 decodeURI();の()には、復号したい文字列を入れます。作例では、復号前のファイルパスが入っているDocPathを()内に記述しています(通常の文字列を記述する場合は、「decodeURI(“%E6%9D%91%E4%B8%8A%E5%85%88%E8%BC%A9”);」のように「””」で囲む)。

3.組み合わせ

 1.と2.を組み合わせれば、「ファイル名まで含めてパスを取得する」が可能です。

//現在操作しているInDesignファイルの名前をファイルパスも含めて取得
var FileObj=app.activeDocument.name;
  result = FileObj.indexOf(".");
  inddname = FileObj.substr(0, result);
var DocPath = app.activeDocument.filePath;
var DocPathdec =decodeURI(DocPath);//パスを読めるように変換。
alert(DocPathdec+"/"+FileObj);

4.操作しているファイルを起点としてダイアログを開く

var DocPath = app.activeDocument.filePath;
var DocPathdec =decodeURI(DocPath);//パスを読めるように変換
var path=new File(DocPathdec)
var readfile=path.openDlg("ダイアログ","*.txt");


タグ:


広告