InDesign: Skript zum "Einfügen" ausgewählter Objekte in alle nicht gesperrten Ebenen

Ich versuche, ein Skript zu erstellen, um alle ausgewählten Objekte in alle entsperrten Ebenen "an Ort und Stelle einzufügen". Mein Versuch ist wahrscheinlich fast geschafft, aber irgendetwas funktioniert nicht.

var myDoc = app.activeDocument;

var al=myDoc.activeLayer.name; // remembers current layer name
app.copy(); // copies whatever is selected

// paste in place for all unlocked layers, excepting source layer
for (var i=0;i<myDoc.layers.length;i++) {
    if ((myDoc.layers[i].locked=false) && (myDoc.layers[i].name!=al)) {
        myDoc.activeLayer=myDoc.layers[i];
        app.pasteInPlace();
    }
}

Antworten (2)

Bei Ihrer Überprüfung, ob die Ebene gesperrt ist, fehlt ein =(es wird eher zugewiesen als anderweitig ausgewertet). Es sollte sein;

if ( myDoc.layers[i].locked == false ) ...

Ich habe gerade getestet und das Skript funktioniert perfekt mit dem korrigiert.

Das vollständige Arbeitsskript lautet dann:

var myDoc = app.activeDocument;

var al = myDoc.activeLayer.name; // remembers current layer name
app.copy(); // copies whatever is selected

// paste in place for all unlocked layers, excepting source layer
for ( var i = 0; i < myDoc.layers.length; i++ ) {
    if ( myDoc.layers[i].locked == false && myDoc.layers[i].name != al ) {
        myDoc.activeLayer = myDoc.layers[i];
        app.pasteInPlace();
    }
}
Heah, ich wusste, dass ich etwas Grundlegendes verpasst haben muss :)) danke.. fügte dies auch der Frage hinzu, falls jemand das googelt
@Lucian, keine Sorge, Sie sollten wirklich den falschen Code in der Frage belassen, die Frage macht keinen Sinn, wenn der Code funktioniert :) (Ich habe hier jedoch den vollständigen festen Code hinzugefügt)

Variantenskript zum Einfügen ausgewählter Objekte auf allen anderen gesperrten Ebenen:

var myDoc = app.activeDocument;

var al=myDoc.activeLayer.name; // remembers current layer
app.copy(); // copies whatever is selected

for (var i=0;i<myDoc.layers.length;i++) {
    if ((myDoc.layers[i].locked==true) && (myDoc.layers[i].name!=al)) {
        myDoc.activeLayer=myDoc.layers[i]; // select next layer
        myDoc.layers[i].locked=false; // unlock it
        app.pasteInPlace(); // paste in place
        myDoc.layers[i].locked=true; // relock it   
    }
}

myDoc.activeLayer=al; // Go back to original  layer
Das ist das Einfügen in alle gesperrten Ebenen, OP sagt "alle entsperrten Ebenen".
Anscheinend funktioniert das Einfügen an Ort und Stelle nur auf UNGESPERRTEN UND SICHTBAREN Ebenen, also ja, ich habe das gerade beim Bearbeiten entdeckt.
Oh ich verstehe. Aus diesem Grund habe ich vorgeschlagen, die Zielebene einfach zu entsperren, einzufügen und dann wieder zu sperren (falls gewünscht).
Es ist ein guter Punkt. Lass mich das nochmal überdenken :)
Meine Antwort als Variante bearbeitet ...
Ich verstehe, Ihre Alternative ist definitiv gültig, aber mit einer anderen Logik. Ihr Geschmack zwingt das Einfügen für ALLE Ebenen an Ort und Stelle, der ursprüngliche Umfang der Frage bestand jedoch darin, nur UNLOCKED-Ebenen einzufügen. Das Freischalten nur einiger von ihnen funktioniert tatsächlich wie eine Checkliste. Bin mir nicht sicher ob das Sinn macht :)
Wenn Sie sich das noch einmal ansehen, ist die letzte Zeile, die Sie hinzugefügt haben, sehr nützlich. Das Zurückgehen zum ursprünglichen Schichtteil.
Eigentlich wegen der letzten Zeile. Ich habe es meinem Skript hinzugefügt, da ich es nützlich finde. Aber hast du es versucht? Es scheint nicht auf die ursprüngliche Ebene zurückzuspringen ...
@Lucian Ich arbeite, aber das Auswählen von Ebenen und das Auswählen von Objekten sind zwei verschiedene Dinge. Wenn Sie Ihr Ebenenbedienfeld überprüfen, sehen Sie, dass die aktive Ebene diejenige ist, auf der Sie Ihr Objekt zuerst ausgewählt haben, aber das ausgewählte Objekt befindet sich auf der letzten Ebene Ihrer Schleife. In meiner Variante wurde das Objekt nicht ausgewählt, weil die Ebene neu gesperrt wurde, also war es kein Problem. Bei deiner Variante ist das anders. Fügen Sie einfach app.selection = null hinzu; Wenn Sie zu den ursprünglichen Auswahlen zurückkehren möchten, wäre das eine andere Geschichte.