Skip navigation
Currently Being Moderated

InDesign Table - Collapse empty Row

Jan 21, 2010 5:06 AM

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!

 
Replies
  • Currently Being Moderated
    Jan 21, 2010 8:03 AM   in reply to fettergroup

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

                }

            }

        }

     
    |
    Mark as:
  • Currently Being Moderated
    Jan 22, 2010 7:45 AM   in reply to fettergroup

    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).

     

     

    script.png

     

    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[j].cells.length-1; k>=0; k--){

                    if (myTable.rows[j].cells[k].contents != "") myContents++;

                    }

                if (myContents == 0) myTable.rows[j].remove();

                }

            }

     
    |
    Mark as:
  • Currently Being Moderated

    Hey Guys I tried to use both these scripts in CS4.

    In both instances, Indesign crashed.

     

    I have 800+ records of which approx 600 empty cells need to be removed.

    I also tried it selecting a single table and it failed.

     

    Any advice?

     
    |
    Mark as:
  • Currently Being Moderated
    Mar 14, 2011 11:34 PM   in reply to Jeremy bowmangraphics-DQuh1B

    I got this to work except that it considered rows that had a column with too wide of text as empty (i.e. there is a date 03/12/11 in a column too wide to hold it, therefore it shows up as a red dot). I need to keep those rows. How would you modify this script to be cautious of that?

     

    Thank you,

    Tim

     
    |
    Mark as:
  • John Hawkinson
    5,512 posts
    Jun 25, 2009
    Currently Being Moderated
    Mar 15, 2011 1:17 AM   in reply to timfur

    Sure. The script currently increments a variable called "myContents" if there are non-zero contents in the cell:

     

    if (myTable.rows[j].cells[k].contents != "") myContents++;
    

     

    And then if myContents is zero, it removes the cell.

    So you could also increment myContents if the text is overset; just add a line like this after the above:

     

    if (myTable.rows[j].cells[k].overflows) myContents++;

     
    |
    Mark as:
  • Currently Being Moderated

    Jeremy, your script works beautifully. Is it possible to modify it so it works for empty columns instead of rows? I tried doing it myself, but it didn't work (not suprisingly). Thanks

     
    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (0)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points