【InDesign】選択しているオブジェクトに連番で名前をつける | Blue-Scre{7}n.net | よそいちのDTPメモ

トップページ » InDesign » 【InDesign】選択しているオブジェクトに連番で名前をつける

【InDesign】選択しているオブジェクトに連番で名前をつける

公開日:2017年3月31日 最終更新日:2022年10月18日

 InDesignでオブジェクトに名前をつけることはそうそうないので、「何に使うんだ」という感じですが…Illustratorでも動くので、むしろそっちのほうが使いみちがありそうです。InDesign CS5以降で動きます。

 

1.選択順([レイヤー]パネルで下にあるものから)で番号をつける

var selObj = app.activeDocument.selection;
var selCount=selObj.length;
if(selCount==0){
  alert("オブジェクトが選択されていません")
}else{
    var pr=prompt("任意のオブジェクト名を入力。入力なしなら番号だけ入る","");
    var arr = [];
    for (var i=0; i < selCount; i++) {
     arr[i] = i+1;//1からスタートに
     var Objname=pr+arr[i]
     selObj[i].name = Objname;
    }
    }

 

2.選択したオブジェクトを座標順(左上からZ型)で連番

 Illustratorでは、visibleBoundsの順序がInDesignと違うため、順序はN型になります。IllustratorでZ型にする場合はこちら

//並べ替え関数。左上からZ型に並べ替えていくように。IllustratorだとN型になっちゃう
//-1が返る場合は前に、1が返る場合は後ろに。0は順番に変更なし
function sortselObj(a, b){
  var y1 = a.visibleBounds[0];
  var x1 = a.visibleBounds[1];
  var y2 = b.visibleBounds[0];
  var x2 = b.visibleBounds[1];
  if (y1 > y2) {
    return 1;
  } else if (y1 < y2) {
    return -1;
  } else if (y1 == y2) {
    if (x1 == x2) {
      return 0;
    } else if (x1 > x2) {
      return 1;
    } else if (x1 < x2) {
      return -1;
    }
  }
}
var selObj = app.activeDocument.selection;
var selCount=selObj.length;
  selObj.sort(sortselObj)//配列の順序を替える
if(selCount==0){
  alert("オブジェクトが選択されていません")
}else{
  var arr = [];
  var pr=prompt("任意のオブジェクト名を入力。入力なしなら番号だけ入る","");
    for (var i=0; i < selCount; i++) {
     arr[i] = i+1;//1からスタートに
     var Objname=pr+arr[i]
     selObj[i].name = Objname;
   }
}

 

 最近作成していた「選択オブジェクト」を基準に動くスクリプト、ソーティングを入れて強化できるような気が…たとえば「選択したオブジェクトをそれぞれアートボードにする」とか。

3.選択したオブジェクトに全部同じ名前をつける

2.のスクリプトからarr[i]を削除すると、選択オブジェクトに全部同じ名前をつけられます。

//並べ替え関数。左上からZ型に並べ替えていくように。IllustratorだとN型になっちゃう
//-1が返る場合は前に、1が返る場合は後ろに。0は順番に変更なし
function sortselObj(a, b){
  var y1 = a.visibleBounds[0];
  var x1 = a.visibleBounds[1];
  var y2 = b.visibleBounds[0];
  var x2 = b.visibleBounds[1];
  if (y1 > y2) {
    return 1;
  } else if (y1 < y2) {
    return -1;
  } else if (y1 == y2) {
    if (x1 == x2) {
      return 0;
    } else if (x1 > x2) {
      return 1;
    } else if (x1 < x2) {
      return -1;
    }
  }
}
var selObj = app.activeDocument.selection;
var selCount=selObj.length;
  selObj.sort(sortselObj)//配列の順序を替える
if(selCount==0){
  alert("オブジェクトが選択されていません")
}else{
  var arr = [];
  var pr=prompt("任意のオブジェクト名を入力。入力なしなら番号だけ入る","");
    for (var i=0; i < selCount; i++) {
     var Objname=pr;
     selObj[i].name = Objname;
   }
}

タグ:


広告