コモノExtendScript100本ノック

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

011.【ID】複数の段落スタイルに同じ設定を施す

書いたコード

#targetengine "addProperty"
var doc = app.activeDocument;
var allPstyles = doc.allParagraphStyles;
var allPstylesLen = allPstyles.length;
var pstyles = []; // [基本段落]と[段落スタイルなし]以外の段落スタイル
var pstylesNames = []; // [基本段落]と[段落スタイルなし]以外の段落スタイル名

// [基本段落]と[段落スタイルなし]以外の段落スタイルを取得
for (var i = allPstylesLen - 1; i > 1; i--) {
  pstyles.push(allPstyles[i])
}
pstyles.reverse();

// [基本段落]と[段落スタイルなし]以外の段落スタイル名を取得
var pstylesLen = pstyles.length;
for (var i = 0; i < pstylesLen; i++) {
  pstylesNames.push(pstyles[i].name)
}

// ウィンドウ作成
var dlg = new Window("palette", "段落スタイル一括変更");
dlg.alignChildren = "top";
dlg.orientation = "row";
var leftCol = dlg.add("panel", undefined, "段落スタイル一覧")
var rightCol = dlg.add("group")
for (var i = 0; i < pstylesLen; i++) {
  var pstyleList = leftCol.add("checkbox", undefined, pstylesNames[i]);
  pstyleList.alignment = "left";
}
var property = rightCol.add("edittext", [0, 0, 200, 100], "pointSize='12Q'");
var start = dlg.add("button", undefined, "実行");
dlg.show();
start.onClick = function () {
  var myTxt = property.text;
  for (var i = 0; i < pstylesLen; i++) {
    if (leftCol.children[i].value) {
      for (var j = 0; j < pstylesLen; j++) {
        if (pstylesNames[j] == leftCol.children[i].text) {
          eval("doc.paragraphStyles.itemByName('" + pstylesNames[j] + "')." + myTxt)
        }
      }
    }
  }
  dlg.close();
  alert("完了しました");
}

メモ

積み残し

  • 配列から特定の要素を除外 [段落スタイルなし][基本段落]を除外するところがやや冗長?
    ①allParagraphStyles(配列)内を検索
    ②インデックスを取得
    ③インデックスを指定して削除
    としたほうがいいかも。
    ExtendScriptではindexOfは使えないがspliceは使える。
    010. 段落スタイル名をまとめて変更で作った、インデックスを取得する関数を使えばいけるかも?

参考