secuencia de comandos indesign: marco de texto de salida en el documento activo

En mi documento de indesign tengo alrededor de 250 páginas, cada una de las cuales contiene 1 tabla (1 por página). Lo que estoy tratando de hacer es:

  1. Obtenga el valor de la fila superior de cada tabla
  2. Recuperar la primera letra del contenido de la celda.
  3. cree un marco de texto en cada página para generar esa letra

Aquí está mi código hasta ahora:

var doc = app.activeDocument;  

var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();  
alert(myTable.length)//no. of tables in a document  

for(var i=0; i<myTable.length; i++)  {  
var textFrame = doc.pages[0].textFrames.add();  
var string = myTable[i].contents;
textFrame.properties =  
{  

    geometricBounds : [ 0,0,100,100 ],  
    strokeWidth : 0,  
    fillColor : "None",  
    contents : string

};  
}  

Como se trata de un glosario, las letras serán A,B,C,D..

Por ejemplo, la primera fila de la tabla 1 contiene la cadena "Otro", por lo que en esta página un marco de texto en la esquina superior izquierda dirá la letra A

ACTUALIZACIÓN: Obtenga la primera letra de cada tabla

var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();  
alert(myTable.length)//no. of tables in a document  

for(var i=0; i<myTable.length; i++)  
{  
        var string = myTable[i].contents[0][0];
        alert(string);
}  
¿Cómo es que su código hasta ahora no funciona de la manera que imagina?
Sin las propiedades del marco de texto, logré obtener el valor de cada tabla, pero estoy atascado en obtener la primera letra y luego crear el marco de texto
@ usr2564301: en la actualización de la pregunta, logré obtener la primera letra de cada uno, ¿alguna idea sobre cómo crear un nuevo marco de texto en cada página con esa letra? en la esquina superior izquierda

Respuestas (1)

¡Casi lo tenía allí!

Usé su código como base, y esto es lo que se me ocurrió:

if (parseFloat(app.version) < 6)
    getTableInitials();
else
    app.doScript(getTableInitials, ScriptLanguage.javascript, undefined, UndoModes.fastEntireScript, "Table Initials to Text Frames");


function getTableInitials() {

    var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
    var myTableCount = myTable.length;

    for (var i = 0; i < myTableCount; i++) {
        var initialLetter = myTable[i].contents[0][0];
        var pageName = myTable[i].parent.parentPage.name;
        var textFrame = app.activeDocument.pages.itemByName(pageName).textFrames.add();
        textFrame.properties = {
            geometricBounds: [0,0,100,100],
            strokeWeight: 0,
            fillColor: "None",
            contents: initialLetter
        };
    }

    alert("Finished! Added " + myTableCount + " text frames.");

}

Este script creará un marco de texto con una letra inicial para cada tabla en una sola página. No debería importar el nombre de sus páginas (es decir, números arábigos o romanos, letras, etc.), debería incluirlas todas. También envolví el script en una función para que fastEntireScriptse pueda llamar. Al menos debería darle la cortesía de estar a solo un paso de deshacer el script, en lugar de número de tablas × 2 .

Dado que ha declarado que su documento contiene una tabla por página, no debería haber ningún problema. Sin embargo, si tiene más de una tabla, terminará con varios marcos de texto superpuestos uno encima de otro, cada uno con la letra inicial de la tabla respectiva.

Asegúrese de cambiar las propiedades del marco de texto a su gusto. He incluido parámetros de su código como valores predeterminados (también corregidos strokeWidtha strokeWeight).

¡Espero que esto ayude!