InDesign: secuencia de comandos para "pegar en su lugar" los objetos seleccionados en todas las capas desbloqueadas

Estoy tratando de crear un script para "pegar en su lugar" todos los objetos seleccionados en todas las capas desbloqueadas. Mi intento probablemente esté cerca, pero algo no funciona.

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();
    }
}

Respuestas (2)

A su verificación si la capa está bloqueada le falta un =(está asignando en lugar de evaluar de otra manera). Debería ser;

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

Acabo de probar y el script funciona perfectamente con eso corregido.

El script de trabajo completo es entonces:

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, sabía que debía haberme perdido algo básico :)) gracias ... también agregué esto a la pregunta en caso de que alguien busque esto en Google
@Lucian, no se preocupe, realmente debería dejar el código incorrecto en la pregunta, sin embargo, la pregunta realmente no tiene sentido si el código funciona :) (aunque he agregado el código fijo completo aquí)

Script variante para pegar en su lugar los objetos seleccionados en todas las demás capas bloqueadas:

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
Eso es pegar en todas las capas bloqueadas, OP dice "todas las capas desbloqueadas "
Aparentemente, Pegar en el lugar solo funciona en capas DESBLOQUEADAS Y VISIBLES, así que sí, acabo de descubrir esto mientras editaba.
Oh ya entiendo. Es por eso que sugerí simplemente desbloquear la capa de destino, pegarla en su lugar y luego volver a bloquearla (si lo desea)
Es un buen punto. Déjame repensar esto :)
Edité mi respuesta, como una variante ...
Ya veo, tu alternativa es definitivamente válida, pero con una lógica diferente. Su sabor está forzando la pasta en su lugar para TODAS las capas, sin embargo, el alcance inicial de la pregunta era pegar solo en las capas DESBLOQUEADAS. Desbloquear solo algunos de ellos en realidad funciona como una lista de verificación. No estoy seguro si esto tiene sentido :)
Mirando esto nuevamente, la última línea que agregó es bastante útil. La parte de volver a la capa original.
En realidad, sobre esa última línea. Lo agregué a mi script ya que lo encuentro útil. ¿Pero lo intentaste? No parece volver a la capa original...
@Lucian I funciona, pero seleccionar una capa y seleccionar un objeto son 2 cosas diferentes. Si revisa su panel de capas, verá que la capa activa es la que seleccionó primero para su objeto, pero el objeto seleccionado está en la última capa de su ciclo. En mi variante, el objeto no se seleccionó porque la capa se volvió a bloquear, por lo que no fue un problema. En su variante, es diferente. Simplemente agregue app.selection = null; Si desea volver a las selecciones originales, esa sería una historia diferente.