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.
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 processTable
es donde ocurre la magia; en este caso, cambié el recuadro inferior para 20pt
agregar 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 0
y no en 1
. Si no recuerdo mal, VBA comienza por defecto con 1
; y entonces el tuyo 3
estaría 2
en 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 length
dentro de mis propios bucles.
Janus Bahs Jacquet
MinneapolisCoder9
Janus Bahs Jacquet
MinneapolisCoder9