コモノExtendScript100本ノック

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

044.【ID】任意の文字列をテキスト変数にする(都度確認ver)

書いたコード

//@targetengine 'convertToTextVariables2'

var doc = app.activeDocument;

var dialog = new Window("palette", "テキスト変数に置換");
dialog.add("statictext", undefined, "検索対象(正規表現)");
var source = dialog.add("edittext");
dialog.add("statictext", undefined, "テキスト変数 名前");
var tvName = dialog.add("edittext");
dialog.add("statictext", undefined, "テキスト変数 テキスト");
var tvContents = dialog.add("edittext");
source.preferredSize = tvName.preferredSize = tvContents.preferredSize = [120, 20];
var start = dialog.add("button", undefined, "実行");

start.onClick = function () {
  try {
    var tv = doc.textVariables.itemByName(tvName.text)
  } catch (e) {
    var tv = doc.textVariables.add({name: tvName.text});
  }
  tv.variableType = VariableTypes.CUSTOM_TEXT_TYPE;
  tv.variableOptions.contents = tvContents.text;

  // 置換対象取得
  app.findGrepPreferences.findWhat = source.text;
  var results = app.findGrep();
  // テキスト変数に置換
  for (var i = 0; i < results.length; i++) {
    app.select(results[i]);
    if (confirm("置換しますか?")) {
      var sel = doc.selection[0];
      sel.insertionPoints.firstItem().textVariableInstances.add({associatedTextVariable: tv});
      results[i].remove();
    }
  }
  resetFindPref();
}
dialog.show();

function resetFindPref() {
  app.findGrepPreferences = NothingEnum.NOTHING;
  app.changeGrepPreferences = NothingEnum.NOTHING;
}

メモ

積み残し

  • ひとつ前に戻れるようにする?
  • 間違えて置換してしまった場合の救済措置
  • コンテキストメニューから登録できる(コメント欄参照)

参考