コモノExtendScript100本ノック

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

024.【ID】特定の文字列を一括でテキスト変数にする

「2018年度」を一括で「2019年度」にしたい。ついでに来年はもっと楽したい。

書いたコード

#targetengine "convertToTextVariables"
var doc = app.activeDocument;
// ウィンドウ作成
var myWindow = new Window("palette", "テキスト変数に置換");
var clmnSize = [120, 20];
myWindow.add("statictext", undefined, "検索対象(正規表現)");
var myRegExpClmn = myWindow.add("edittext");
myWindow.add("statictext", undefined, "テキスト変数 名前");
var myTVNameClmn = myWindow.add("edittext");
myWindow.add("statictext", undefined, "テキスト変数 テキスト");
var myTVTxtClmn = myWindow.add("edittext");
myRegExpClmn.preferredSize = myTVNameClmn.preferredSize = myTVTxtClmn.preferredSize = clmnSize;
var start = myWindow.add("button", undefined, "実行");

start.onClick = function () {
  // テキスト変数を作成
  var myTV = doc.textVariables.add({name:myTVNameClmn.text});
  myTV.variableType=VariableTypes.CUSTOM_TEXT_TYPE;
  myTV.variableOptions.contents = myTVTxtClmn.text;
  // 置換対象取得
  app.findGrepPreferences.findWhat = myRegExpClmn.text;
  var myFindWhat = app.findGrep();
  // テキスト変数に置換
  for (var i = 0; i < myFindWhat.length; i++) {
    app.select(myFindWhat[i]);
    var sel = doc.selection[0];
    sel.insertionPoints.firstItem().textVariableInstances.add ({associatedTextVariable: myTV});
    myFindWhat[i].remove();
  }
  myFindPrefReset();
}
myWindow.show();

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

メモ

分からなかったこと

  • menuActions
    最初に立てた方針では、menuActionsでテキスト変数を挿入するつもりだった。
    Id上の操作でいうと、「書式→テキスト変数→変数を挿入→作成した変数」というのをやりたかったのだけど、どう書けばいいのか分からなかった。
    とりあえずこれではないと思うんだけど一応メモしておく。
var myAction = app.menuActions.itemByName("$ID/Custom Text")
myAction.invoke();

積み残し

  • 一つ一つ確認しながら置換していけるようにしたい。

参考