LoginSignup
0
0

More than 1 year has passed since last update.

InDesign スクリプト 変数を変数名のテキストに

Last updated at Posted at 2021-06-19

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

/*
更新 2021/06/22
*/

// アプリ指定
#target "indesign";

// スクリプト名
var scriptName = "変数を変数名のテキストに";

//スクリプトの動作指定(一つのアンドゥ履歴にする、及び、アンドゥ名)
app.doScript(function () {

    // ダイアログ
    var dialogueFlg = confirm("カスタムテキスト変数のインスタンスをその変数の名前のテキストに置換します。"
    + "\r\r" + "選択がない場合はドキュメント全体で置換、選択がある場合は選択内で置換します。 ", scriptName);

    // Noの場合
    if (dialogueFlg == false) {

        // スクリプトを終了
        exit();
    }

    // 変換した数
    var convertInstancesNumber = 0;

    // 削除した数
    var removeNumber = 0;

    // 削除フラグ
    var deleteFlg = false;

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

        // ダイアログ
        deleteFlg = confirm("カスタムテキスト変数を削除しますか?","", scriptName);

        // テキスト変数の数だけ逆に繰り返す
        for(var i = app.activeDocument.textVariables.count() - 1; i >= 0; i--){

            // カスタムテキスト変数の場合
            if(app.activeDocument.textVariables.item(i).variableType == VariableTypes.CUSTOM_TEXT_TYPE){

                 // インスタンスの数だけ逆に繰り返す
                for(var ii = app.activeDocument.textVariables.item(i).associatedInstances.length - 1; ii >= 0; ii--){               

                    // 変数名を挿入
                    app.activeDocument.textVariables.item(i).associatedInstances[ii].storyOffset.contents = app.activeDocument.textVariables.item(i).name;

                    // インスタンスを削除(associatedInstances配列の数が減る)
                    app.activeDocument.textVariables.item(i).associatedInstances[ii].remove();

                    // 数を増やす
                    convertInstancesNumber++;
                }

                // カスタムテキスト変数を削除の場合
                if(deleteFlg == true){

                    // 削除
                    app.activeDocument.textVariables.item(i).remove();

                    // 数を増やす
                    removeNumber++;
                }
            }
        }

    // 以外の場合
    }else{

        // 対象
        var targetObject;

        // 選択の数だけ繰り返す
        for(var i = 0; i < app.activeDocument.selection.length; i++){

            // 選択が要素の場合
            if(app.activeDocument.selection[i].constructor.name == "XMLElement"){

                // 参照を入れる
                targetObject = app.activeDocument.selection[i].xmlContent;

            // 以外の場合
            }else{

                // 選択を入れる
                targetObject = app.activeDocument.selection[i];
            }

            // textVariableInstancesプロパティが存在する場合
            if(targetObject.hasOwnProperty("textVariableInstances") == true){

                 // インスタンスの数だけ逆に繰り返す
                for(var ii = targetObject.textVariableInstances.count() - 1; ii >= 0; ii--){     

                    // カスタムテキスト変数の場合
                    if(targetObject.textVariableInstances.item(ii).associatedTextVariable.variableType == VariableTypes.CUSTOM_TEXT_TYPE){

                        // 変数名を挿入
                        targetObject.textVariableInstances.item(ii).storyOffset.contents = targetObject.textVariableInstances.item(ii).associatedTextVariable.name;

                        // テキスト変数のインスタンスを削除
                        targetObject.textVariableInstances.item(ii).remove();

                        // 数を増やす
                        convertInstancesNumber++;
                    }
                }
            }
        }
    }

    // 結果の文
    var  resultText;

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

        // 入れる
        resultText = "アクティブドキュメント全体で置換をおこないました。";

    // 以外の場合
    }else{

        // 入れる
        resultText = "選択内で置換をおこないました。";
    }

    // 削除の場合
    if(deleteFlg == true){

        // 文章を追加
        resultText +=  "\r\r" + "置換数 " + convertInstancesNumber + "\r" + "削除したカスタムテキスト変数の数 " + removeNumber;

    // 以外の場合
    }else{

        // 文章を追加
        resultText +=  "\r\r" + "置換数 " + convertInstancesNumber;
    }

    // 結果を表示
    alert(resultText, scriptName);

//スクリプトの動作指定の続き
}, ScriptLanguage.JAVASCRIPT, [scriptName], UndoModes.ENTIRE_SCRIPT, scriptName);
0
0
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
0