変数名と一致するテキストを変数にするスクリプトは、これで良いのかな・・・?
/*
更新 2021/6/22
*/
// アプリ指定
#target "indesign";
// スクリプト名
var scriptName = "変数名と一致するテキストを変数に";
//スクリプト動作指定(一つのアンドゥ履歴にする、及び、アンドゥ名の指定)
app.doScript(function () {
// ダイアログ
var dialogueFlg = confirm("カスタムテキスト変数の名前と一致するテキストを変数に置換します。"
+ "\r\r" + "選択がない場合はアクティブドキュメント全体で置換、選択がある場合は選択内で置換します。 ", "", scriptName);
// Noの場合
if (dialogueFlg == false) {
// スクリプトを終了
exit();
}
// 置換数
var replaceNumber = 0;
// 検索の初期化
app.findTextPreferences = NothingEnum.nothing;
// テキスト変数の数だけ繰り返す
for(var i = 0; i < app.activeDocument.textVariables.count(); i++){
// カスタムテキスト変数の場合
if(app.activeDocument.textVariables.item(i).variableType == VariableTypes.CUSTOM_TEXT_TYPE){
// 検索テキストに変数名を入れる
app.findTextPreferences.findWhat = app.activeDocument.textVariables.item(i).name;
// 選択がない場合
if(app.activeDocument.selection.length == 0){
// テキスト変数挿入
replaceNumber += insertTextVariableInstanceByName(app.activeDocument,app.activeDocument.textVariables.item(i));
// 以外の場合
}else{
// 選択の数だけ繰り返す
for (var ii = 0; ii < app.activeDocument.selection.length; ii++){
// オブジェクトのメソッドにfindTextがある場合
if (typeof(app.activeDocument.selection[ii].findText) == "function"){
// テキスト変数挿入
replaceNumber += insertTextVariableInstanceByName(app.activeDocument.selection[ii],app.activeDocument.textVariables.item(i));
}
}
}
}
}
// 検索の初期化
app.findTextPreferences = NothingEnum.nothing;
// 結果の文
var resultText;
// 選択がない場合
if(app.activeDocument.selection.length == 0){
resultText = "アクティブドキュメント全体で置換をおこないました。";
// 以外の場合
}else{
resultText = "選択内で置換をおこないました。";
}
// 結果を表示
alert(resultText + "\r\r" + "置換数 " + replaceNumber, scriptName);
//スクリプト動作指定(一つのアンドゥ履歴にする及びアンドゥ名の指定)の続き
}, ScriptLanguage.JAVASCRIPT, [scriptName], UndoModes.ENTIRE_SCRIPT, scriptName);
/* テキスト変数挿入関数、引数(検索対象、テキスト変数)の宣言 */
function insertTextVariableInstanceByName(searchTarget,targetTextVariable){
// 検索結果の配列
var searchResultArray = searchTarget.findText();
// 検索結果の範囲
var searchResultRange;
// 置換数
var replaceNumber = 0;
// 逆順に検索結果の数だけ繰り返す
for(i = searchResultArray.length - 1; i >= 0; i--){
// 検索結果の範囲を入れる
searchResultRange = searchResultArray[i].characters.itemByRange(0,-1);
// テキスト変数を挿入
searchResultArray[i].insertionPoints.lastItem().textVariableInstances.add().associatedTextVariable = targetTextVariable;
// 検索結果を削除
searchResultRange.remove();
replaceNumber++;
}
// 置換数を戻す
return replaceNumber;
}