Skip to main content
Participant
January 21, 2010
Answered

InDesign Table - Collapse empty Row

  • January 21, 2010
  • 5 replies
  • 13287 views

My apologies if this is not posted in the proper category...


Ok, here's my issue...


I have a table with 5 rows.  Sometimes, not all of the rows in the table will contain data.  Is it possible for InDesign to automatically collapse a row if there is no data present in the cells in that row?


Thanks!

This topic has been closed for replies.
Correct answer Manan Joshi

hi @lauras86935790,

Try the following, the original code seems to have been corrupted when forum software was migrated

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

-Manan


You could even try a shorter script like the following

var rows = app.activeDocument.textFrames.everyItem().tables.everyItem().rows.everyItem().getElements()
for(var i = rows.length - 1; i >= 0; i--)
{
    if(rows[i].cells.everyItem().contents.toString().replace(/,/g, "") == "")
        rows[i].remove()
}

-Manan

5 replies

Community Expert
August 4, 2022

@lauras86935790 said: "Looks like the script doesn't work anymore..."

 

Hi Laura,

what script code exactly do you mean?

Please point us to a specific post.

 

Note: when this discussion was moved from the old InDesign Scripting forum to the new InDesign forum in October 2019 a lot of scripting contents was damaged during the transition…

 

Thanks,
Uwe Laubender
( Adobe Community Professional )

 

lauras86935790
Participating Frequently
August 4, 2022

Hi!

I was Referring to this one 

var rows = app.activeDocument.textFrames.everyItem().tables.everyItem().rows.everyItem().getElements()
for(var i = rows.length - 1; i >= 0; i--)
{
    if(rows[i].cells.everyItem().contents.toString().replace(/,/g, "") == "")
        rows[i].remove()
}

In Manan's response in Jul 02, 2021

 

Community Expert
August 4, 2022

Thanks for that, @lauras86935790 !

Could you post a sample document where this is not working?

Also note that one cannot remove all body rows of a table ( in case you have some header and footer rows and only one single body row that has no contents). You'll need at least one body row in every table.

 

Also not that graphic cells could spoil the result of the script.

Hm. And perhaps also specific constellations with merged table cells.

 

Regards,
Uwe Laubender
( Adobe Community Professional )

 

Community Expert
July 2, 2021

FWIW: Just to reply to the original poster regarding the title of this thread:

 

"Collapse empty Row" or "Collapse Row" like you can do this in e.g. Excel is not possible with InDesign.

InDesign cannot collapse table rows or table columns. However, what is possible is to detect empty rows per scripting and remove them from the table.

 

Regards,
Uwe Laubender

( ACP )

Participant
April 8, 2015

‌I'm trying to do the same thing after a data merge, however even if the field appears blank the data merge process leaves an invisible kernel/nugget that is viewed as content. So the row isn't deleted. I've cleared the content of the empty rows and tried the script again and it worked perfectly. Sometimes I will have cells with a zero in them. Anyway to modify this script to seek out and remove the rows with invisible kernels?

tas1971
Participant
July 22, 2015

I am having the same issues with the invisible kernals that you are any help would be great

thanks,

Drew

tomt27015212
Participant
October 9, 2015

They're not really invisible, if you Show Hidden Characters and zoom in, you can see they look like a small double colon.  They're kind of hidden behind the "end of story" hashtag/symbol.


After spending half the day on this issue I finally found the solutionhttp://indesignsecrets.com/topic/cs5-data-merge-empty-field-character

Sure enough, in Find/Change, Text, searching for <feff><feff> and leaving "Change to" empty finally eradicated these buggers!  What a nuisance.  After that, the script runs fine and deletes the empty rows.

Participant
October 3, 2013

Hello,

Nice script, but I have just one problem. The script deleted the blank rows, but the script add for some reasons blank spaces?

You will find my pdf here... Any idea?

http://www.wallacesanders.be/test.pdf

Jeremy_bowmangraphics-DQuh1B
Inspiring
January 21, 2010

The following script should remove any empty rows in all tables in a document:

EDIT: From prior experience, I know it's a better idea to count backwards when deleting, so here is the earlier script with the order reversed:

var myDocument = app.activeDocument;

for(var i=myDocument.textFrames.length-1; i>=0; i--){

    for(var j=myDocument.textFrames.tables.length-1; j>=0; j--){

        for(var k=myDocument.textFrames.tables.rows.length-1; k>=0; k--){

            myContents = 0;

            for(var l=myDocument.textFrames.tables.rows.cells.length-1; l>=0; l--){

                if (myDocument.textFrames.tables.rows.cells.contents != "") myContents++;

                }

            if (myContents == 0) myDocument.textFrames.tables.rows.remove();

            }

        }

    }

Participant
January 22, 2010

Thanks for that answer.. I created another post for how I actually utilize this script... Please help if you have any more info!

Thanks!

http://forums.adobe.com/thread/561169

Jeremy_bowmangraphics-DQuh1B
Inspiring
January 22, 2010

Jongware has probably answered this already, but if not:

To run a script in InDesign, copy the code and paste it into

an ordinary text editor (such as Notepad in Windows), then

save the file with the extension .jsx in the Scripts Panel Folder

(typical path: Start > MyComputer > Local Disk(C:) >

Program Files > Adobe > Adobe InDesign CS3 > Scripts >
Scripts Panel).

It will then be available from within InDesign (Window > Automation > Scripts).

Yesterday's script removes empty rows from all tables in a document.

You might find the script below a bit more convenient, as it removes

empty rows in selected tables (or tables in selected text) only.

To run the script, highlight a table or some text containing a
number of tables, and then double-click on the name of the script in
the Scripts panel.

var mySelection=app.activeDocument.selection[0];

try{ var myTableCount = mySelection.tables.length;}

catch(myError){ var myTableCount = 1;}

for (var i=myTableCount-1; i >=0; i--) {

try{ var myTable = mySelection.tables.item(i);}

catch(myError){var myTable = mySelection; }

for(var j=myTable.rows.length-1; j>=0; j--){

            var myContents = 0;

            for(var k=myTable.rows.cells.length-1; k>=0; k--){

                if (myTable.rows.cells.contents != "") myContents++;

                }

            if (myContents == 0) myTable.rows.remove();

            }

        }