He importado XML que contiene tablas anidadas y he creado un script para eliminar todas las celdas vacías, que es como:
var myDocument = app.activeDocument;
for(var i=myDocument.textFrames.length-1; i>=0; i--){
for(var j=myDocument.textFrames[i].tables.length-1; j>=0; j--){
for(var k=myDocument.textFrames[i].tables[j].rows.length-1; k>=0; k--){
myContents = 0;
for(var l=myDocument.textFrames[i].tables[j].rows[k].cells.length-1; l>=0; l--){
if (myDocument.textFrames[i].tables[j].rows[k].cells[l].contents != "") myContents++;
}
if (myContents == 0) myDocument.textFrames[i].tables[j].rows[k].remove();
}
}
}
Esto funciona para una tabla ordinaria, pero en mi documento XML que contiene las tablas, no elimina las celdas vacías, aunque presiona la instrucción if correcta.
¿Alguien tiene alguna solución?
Como se menciona en un comentario, las filas vacías que no encuentra el script son aquellas que están en una tabla anidada en su totalidad dentro de una tabla más grande.
La lógica del script no los ve; solo mira las tablas 'inmediatamente' dentro de los marcos de texto. Para arreglar esto, necesita un ciclo separado dentro del ciclo Table que verifica específicamente las tablas anidadas. (Lo que no se escala bien: si puede haber tablas dentro de estas tablas dentro de tablas, necesita otro ciclo. Es mejor escribir una función separada , que pueda llamarse a sí misma recursivamente; entonces funciona con tablas-en-tablas-en- mesas-en...)
Una mejora menor adicional es que no se repiten los marcos de texto , sino las historias completas . (Lo cual, además de la velocidad, también tiene la ventaja de que las tablas con texto desbordado también se procesan).
Con todo, el siguiente script completo debería funcionar para tablas anidadas:
var myDocument = app.activeDocument;
for(var i=0; i<myDocument.stories.length; i++)
{
for(var j=0; j<myDocument.stories[i].tables.length; j++)
{
processTable(myDocument.stories[i].tables[j]);
}
}
function processTable (any_table)
{
var r,c,t, isEmpty;
for (r=any_table.rows.length-1; r>=0; r--)
{
isEmpty = true;
for (c=0; c< any_table.rows[r].cells.length; c++)
{
for (t=0; t<any_table.rows[r].cells[c].tables.length; t++)
processTable (any_table.rows[r].cells[c].tables[t]);
if (any_table.rows[r].cells[c].contents != '')
isEmpty = false;
}
if (isEmpty)
any_table.rows[r].remove();
}
}
Jongware
carriles123
carriles123
Jongware
carriles123
Jongware