LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2021-06-14

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

/*
更新 2021/6/22
*/

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

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

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

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

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

        // 終了
        exit();
    }

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

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

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

    // 選択がない場合
    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].convertToText();

                    // 数を増やす
                    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).convertToText();

                        // 数を増やす
                        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