0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

InDesign スクリプト 変数値と一致するテキストを変数に

Last updated at Posted at 2021-06-21

変数値と一致するテキストを変数にするスクリプトは、これで良いのかな・・・?

/*
更新 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).variableOptions.contents;

            // 選択がない場合
            if(app.activeDocument.selection.length == 0){

                // テキスト変数挿入
                replaceNumber += insertTextVariableInstanceByContents(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 += insertTextVariableInstanceByContents(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 insertTextVariableInstanceByContents(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;
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?