DTPab

印刷やデザイン、アドビ製アプリやスクリプトなど、雑多な技術ブログ

もくもく会#2レジュメ 解答編3「すべてのドキュメントで実行」

改めて元の設問はこちら
機能1機能2・3は前回・前々回の記事を参照してください。

さて、機能4です。
4.開いているすべてのドキュメントで実行する

var allDocs = app.documents;
for (var x=0; x<allDocs.length; x++){
    //var myDoc = app.activeDocument;
    var myDoc = allDocs[x];
    var myTxf = myDoc.textFrames;
    var tgtBlack = myDoc.swatches.item('Black');
    for (var i=0; i<myTxf.length; i++){
        var myTab = myTxf[i].tables;
        for (var k=0; k<myTab.length; k++){
            var myCel = myTab[k].cells;
            for (var m=0; m<myCel.length; m++){
                if (!myCel[m].diagonalLineStrokeOverprint &&
                    myCel[m].diagonalLineStrokeColor == tgtBlack){
                    myCel[m].diagonalLineStrokeOverprint = true;
                    }
                if (!myCel[m].diagonalLineStrokeGapOverprint &&
                    myCel[m].diagonalLineStrokeGapColor == tgtBlack){
                    myCel[m].diagonalLineStrokeGapOverprint = true;
                    }
                }
            }
        }
    }

まず新たに変数allDocsを用意し、app.documentsというドキュメントのコレクションを格納しました。そのコレクションに対してfor文を用い、ドキュメントひとつずつに対してこれまでの処理を実行するだけです。myDocの内容を変えるだけなので、以降については手を触れる必要がありません。
ただ流石にこれでは芸がないので、増えすぎたネスト({ }の入れ子)を調整してみました。

var allDocs = app.documents;
for (var x=0; x<allDocs.length; x++){
    //var myDoc = app.activeDocument;
    var myDoc = allDocs[x];
    var myTxf = myDoc.textFrames;
    var tgtBlack = myDoc.swatches.item('Black');
    for (var i=0; i<myTxf.length; i++){
        var myTab = myTxf[i].tables;
        for (var k=0; k<myTab.length; k++){
            var myCel = myTab[k].cells;
            for (var m=0; m<myCel.length; m++){
                refineDiagonalLineOP (myCel[m]);
                }
            }
        }
    }

function refineDiagonalLineOP (tgtCell){
    if (!tgtCell.diagonalLineStrokeOverprint &&
        tgtCell.diagonalLineStrokeColor == tgtBlack){
        tgtCell.diagonalLineStrokeOverprint = true;
        }
    if (!tgtCell.diagonalLineStrokeGapOverprint &&
        tgtCell.diagonalLineStrokeGapColor == tgtBlack){
        tgtCell.diagonalLineStrokeGapOverprint = true;
        }
    }

というわけで、メインのオーバープリントを処理する部分を関数化してみました。結果的にはネストがひとつ減っただけですが…^^;;
以上、機能4の追加でした。

余談です。
本家JSではどうか知りませんが、関数を定義する際の引数を「仮引数」、実際に関数を呼び出す際に渡す引数を「実引数」とPythonでは呼ぶらしいです。この呼称は割と好きなので普段でも使ったりします。