LoginSignup
0
0

More than 1 year has passed since last update.

InDesign スクリプト 要素名に(構造の選択された属性の値を)

Last updated at Posted at 2021-06-04

構造の選択された属性の値を要素名にするスクリプトは、これで良いのかな・・・?

/*
構造の選択された属性の値を要素名にする
更新 2021/6/4
*/

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

// スクリプト名
var scriptName = "要素名に(構造の選択された属性の値を)";

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

    // 選択されているオブジェクト
    selectObjects = app.activeDocument.selection;

    // 変更された要素名数
    var changeElementNameNumber = 0;

    // 選択されているオブジェクトの数だけ繰り返す
    for(var i = 0; i < selectObjects.length; i++){

        // 選択がXml属性の場合
        if(selectObjects[i].constructor.name == "XMLAttribute"){

            // 選択の親のXml要素のタグ名と属性の値が違う場合
            if(selectObjects[i].parent.markupTag.name != selectObjects[i].value){

                // 属性の値のXmlタグ名が存在しない場合
                if(app.activeDocument.xmlTags.itemByName(selectObjects[i].value).isValid == false){

                    // エラー対策
                    try{

                        // 属性の値の名前のXmlタグを追加
                        app.activeDocument.xmlTags.add(selectObjects[i].value);

                    // エラーの場合
                    }catch(e){

                        // 次の繰り返しへ
                        continue;
                    }
                }

                // Xml要素のタグに属性の値の名前のXmlタグを入れる
                selectObjects[i].parent.markupTag = app.activeDocument.xmlTags.itemByName(selectObjects[i].value);

                // 変更された要素名数を追加
                changeElementNameNumber++;
            }
        }
    }

    // 結果表示
    alert("変更数 " + changeElementNameNumber, 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