コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

009.【ID】段落スタイル名にまとめて連番を振る

書いたコード

#targetengine "numberPstyles"
var doc = app.activeDocument;
var pstyles = doc.allParagraphStyles;
var pstylesLen = pstyles.length;
var pstylesNames = [];
for (var i = pstylesLen - 1; i > 1; i--) {
  pstylesNames.push(pstyles[i].name)
}
pstylesNames.reverse();
var secondNum = ["なし", "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "99"]
var myDlg = new Window("palette", "段落スタイルに連番ふる");
for (var i = 0; i < pstylesLen - 2; i++) {
  var main = myDlg.add("group {alignChildren: 'left', orientation: 'row'}");
  var number1 = main.add("statictext", undefined, "0" + (i + 1)); // 通し番号
  var number2 = main.add("dropdownlist", undefined, secondNum); // 枝番
  var pstylesList = main.add("dropdownlist", undefined, pstylesNames);
}
var start = myDlg.add("button", undefined, "実行");
myDlg.show();
start.onClick = function () {
  for (var i = 0; i < pstylesLen - 2; i++) {
    if (myDlg.children[i].children[2].selection != null) {
      var originalName = myDlg.children[i].children[2].selection.text;
      var firstNum = myDlg.children[i].children[0].text;
      var secondNum = myDlg.children[i].children[1].selection.text;
      for (j = 0; j < pstylesLen; j++) {
        if (pstyles[j].name == originalName) {
          if (secondNum == "なし") {
            pstyles[j].name = firstNum + "_" + originalName
          } else {
            pstyles[j].name = firstNum + "-" + secondNum + "_" + originalName
          }
        }
      }
    }
  }
  myDlg.close();
  alert("完了しました")
}

メモ

分からなかったこと

  • ドロップダウンリストをn個作成 paletteにn個ドロップダウンリストやテキストを追加するという処理、for文回してるけど本当にこれでいいのか。 このやりかたでやるとn番目のドロップダウンを取得したいというときに↓みたいな書き方になってまだるっこしい。
var secondNum = myDlg.children[n].children[1].selection.text; 
// myDlg   :palette
// myDlg.children[n]   :paletteの中のgroup
// myDlg.children[n].children[1]   :groupの中の2つ目の要素すなわちドロップダウンリスト

参考