¿Script de altura de fila de InDesign?

InDesign ha ignorado las alturas de mis filas al importar una hoja de Excel. La altura de cada primera y segunda fila era predeterminada (20), la altura de cada tercera fila era 10. ¿Alguien sabe si puedo lograr estas alturas de fila alternas en mi tabla de InDesign importada? ¿Usando javascript quizás? Usé este bucle VBA en Excel:

'starting at row 3 and ending at row 2000, change row height to 10, skip 3 rows, repeat.
For x = 3 To 2000 Step 3


    Rows(x).RowHeight = 10

Next

Aquí hay un ejemplo de lo que estoy buscando, en InDesign.

¿Para qué son esas filas? Me parece que están puramente allí para dar espacio adicional entre sus filas adyacentes. Si eso es todo para lo que los está usando, probablemente sea más fácil simplemente eliminarlos por completo y simplemente aplicar un estilo de celda que agregue X mm de relleno en la parte inferior de la celda a cada dos filas.
Gracias por tu ayuda @Janus Bahs Jacquet. ¡Estoy casi allí! Sí, las filas están simplemente ahí para dar espacio adicional, así que las eliminé y ahora estoy siguiendo su enfoque. Sin embargo, no creo que pueda agregar relleno de forma alterna. Es decir, Opciones de tabla contiene patrones alternos para trazos y rellenos, pero Opciones de celda no contiene patrones alternos para relleno.
No, no creo que puedas hacerlo tan automático; tendrá que aplicar manualmente el estilo a las filas individuales. A menos que haya una opción de estilo con bandas, que no puedo recordar de antemano, pero no lo creo.
@JanusBahsJacquet, entonces estará bien. Muchas gracias por tu ayuda :)

Respuestas (1)

Descubrí que el cambio global de tablas no es algo que los estilos de tabla y celda hagan muy bien. Aparte del problema siempre presente de que "los estilos de celda simplemente no funcionan" (algo que siempre me he preguntado), hay demasiadas cosas que no se pueden hacer con los estilos de celda. Así que he confiado en las secuencias de comandos para formatear mis tablas durante mucho tiempo.

Tengo un marco básico configurado para manejar diferentes tipos de selecciones, y puede agregarle casi cualquier funcionalidad que desee. Consulte el artículo de InDesignSecrets Abordar tablas a través de secuencias de comandos que escribí sobre esto para conocer la historia completa, además de un par de sugerencias sobre lo que puede hacer con él.

Agregar un poco de espacio debajo de las filas impares es muy sencillo: las primeras funciones aquí son el "marco", el trabajo en cada tabla se realiza en la función final:

app.doScript(checkUserSelection, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "Process Table");

function checkUserSelection ()
{
    var a_table = checkWhichTable();
    if (a_table == null)
    {
        if (confirm("No table selected. Do you want to process *all* tables?") == false)
            return;
        allTables = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
        for (aTable=0; aTable<allTables.length; aTable++)
        {
            processTable (allTables[aTable]);
        }
    } else
    {
        processTable (a_table);
    }
}

function checkWhichTable()
{
// ensure the user made a selection
    if (app.selection.length != 1)
        return null;
    var currentTable = app.selection[0];
    if (currentTable.hasOwnProperty("baseline"))
    {
        currentTable = app.selection[0].parent;
    }
    while (currentTable instanceof Cell || currentTable instanceof Row || currentTable instanceof Column);
    currentTable = currentTable.parent;
    if (!(currentTable instanceof Table))
    {
        // No table selected
        return null;
    }
    return currentTable;
}

function processTable(table)
{
    // do something here!
    var r;
    for (r=2; r<table.rows.length; r+=3)
        table.rows[r].cells.everyItem().bottomInset = "20pt";
}

La función processTablees donde ocurre la magia; en este caso, cambié el recuadro inferior para 20ptagregar un espacio en blanco debajo de cada celda en las filas seleccionadas. (La everyItem()cosita es un truco en el que todas las celdas en una fila se abordan al mismo tiempo. Explicarlo correctamente requiere más conocimiento del que tengo; solo sé cómo usarlo :) Puedes leer On 'everyItem()' de Marc Autret – Parte 1 si te interesa (¡y eso es solo la Parte 1!).)

Si solo desea cambiar la altura de la fila (lo que conduce a un resultado ligeramente diferente con las celdas que contienen más de una sola línea), también puede hacerlo:

function processTable(table)
{
    // do something here!
    var r;
    for (r=2; r<table.rows.length; r+=3)
        table.rows[r].height = "30pt";
}

Tenga en cuenta que Javascript comienza a contar sus filas en 0y no en 1. Si no recuerdo mal, VBA comienza por defecto con 1; y entonces el tuyo 3estaría 2en Javascript.

A Javascript no le gusta acceder a elementos que no existen. Su propio ciclo sube a 2000, y supongo que ese es un valor del que pensó "seguramente eso sería suficiente" (hasta cuando encuentra una tabla donde no lo está), pero en Javascript, obtendría un error si una mesa es más corta que eso. Por lo tanto, la prueba explícita lengthdentro de mis propios bucles.