• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Delete all columns containg only...

Explorer ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi there

I asked a question yesterday and Brianp311 replied me in a right way.

My question was : how could i delete all columns containing only a "-".

The right script that Brianp311 gave me is :

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
var allCells, isAllHyphens;
for ( var i = allCols.length-1; i >= 0; i--)
{
    isAllHyphens = true;
    allCells = allCols[i].cells.everyItem().getElements();
    for (var j = 0; j < allCells.length; j++) {
        if (allCells[j].contents !== "-") { 
            isAllHyphens = false; 
            break; 
        } 
    }
    if (isAllHyphens) { allCols[i].remove(); } 
}

If tested with a simple, manually put "-", it works very well.

My problem is that "-" is inserted automatically by a data merge system (EasyCatalog), with bracket markers. So the script can't find it because it appears like that the joint screencapture.

 

Even if i select it directly, Id gives me a simple "-"...

Thank you for your precious help

 

Regards

Miran

TOPICS
How to , Scripting

Views

524

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Community Expert , Jul 13, 2021 Jul 13, 2021

Hi @lemiran,

Give the following code a try

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
for ( var i = allCols.length-1; i >= 0; i--)
{
	var hrc = allCols[i].parent.headerRowCount
	var con = allCols[i].contents.slice(hrc)
	var a = con.toString().replace(/[,\uFEFF\s]/g,"")
    var regex = /^(-)+$/;
	if(regex.test(a))
		allCols[i].remove()
}

If you still have other use cases then as Uwe suggested it would

...

Votes

Translate

Translate
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi Miran,

Can you share a sample document with this character?

-Manan

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi Manan Joshi

Thank you for your quick reply.

Yes here it is. But i'm not sure the markers will stay if you don't have EasyCatalog plugin or free EasyCatalog reader plugin (https://www.65bit.com/download/reg/#easycatalog-reader)

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Can you please try this? I've added a regular expression to match the weird invisible characters.

 

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
var allCells, isAllHyphens;
for ( var i = allCols.length-1; i >= 0; i--)
{
    isAllHyphens = true;
    allCells = allCols[i].cells.everyItem().getElements();
    var regex = /^\uFEFF\uFEFF-\uFEFF$/;
    for (var j = 0; j < allCells.length; j++) {
        if (regex.test(allCells[j].contents)) { 
            isAllHyphens = false; 
            break; 
        } 
    }
    if (isAllHyphens) { allCols[i].remove(); } 
}

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

If the code provided by @m1b does not work, try replacing the following line

 

var regex = /^\uFEFF\uFEFF-\uFEFF$/;

 

with this line

 

var regex = /\s*-\s*/;

 

-Manan

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Thanks Manan! It's weird though... When I run this code on the sample file

var _table = app.activeDocument.stories.everyItem().tables.everyItem().getElements()[0];
var _cell = _table.cells[0];
var str = _cell.contents

var regex1 = /^\uFEFF\uFEFF-\uFEFF$/;
$.writeln(regex1.test(str));  // true

var regex2 = /^\s\s-\s$/;
$.writeln(regex2.test(str));  // false

 

But when I paste that working regex into the Miran's code it fails, and your regex works. It seems I'm missing something! 🙂 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi @m1b,

Try this version of the code, this works for me both for cases where we have whitespaces around - and also FEFF

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
for ( var i = allCols.length-1; i >= 0; i--)
{
	var a = allCols[i].contents.toString().replace(/[,\uFEFF\s]/g,"")
    var regex = /^(-)+$/;
	if(regex.test(a))
		allCols[i].remove()
}

-Manan

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

@m1b in your version of the code, it seems you got the if condition inverted. The following works

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
var allCells, isAllHyphens;
for ( var i = allCols.length-1; i >= 0; i--)
{
    isAllHyphens = true;
    allCells = allCols[i].cells.everyItem().getElements();
    var regex = /^\uFEFF*-\uFEFF*$/;
    for (var j = 0; j < allCells.length; j++) {
        if (!regex.test(allCells[j].contents)) { 
            isAllHyphens = false; 
            break; 
        } 
    }
    if (isAllHyphens) { allCols[i].remove(); } 
}

-Manan

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Thanks Manan. You are right!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi Manan and M1b and thanks a lot for your searchs

If i try this :

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
var allCells, isAllHyphens;
for ( var i = allCols.length-1; i >= 0; i--)
{
    isAllHyphens = true;
    allCells = allCols[i].cells.everyItem().getElements();
    var regex = /^\uFEFF\uFEFF-\uFEFF$/;
    for (var j = 0; j < allCells.length; j++) {
        if (regex.test(allCells[j].contents)) { 
            isAllHyphens = false; 
            break; 
        } 
    }
    if (isAllHyphens) { allCols[i].remove(); } 
}

it deletes me every columns which DO NOT contain "-" :))

It's almost OK!

If i try this code:

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
for ( var i = allCols.length-1; i >= 0; i--)
{
	var a = allCols[i].contents.toString().replace(/[,\uFEFF\s]/g,"")
    var regex = /^(-)+$/;
	if(regex.test(a))
		allCols[i].remove()
}

 

I have no result.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

I know why it doesn't work for me, because i have a header on my table.

I i try the code on a table without header it works perfectly... But in my case, i always have headers 🙂

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi @lemiran,

Give the following code a try

var myDocument = app.documents.item(0); 
var allCols = myDocument.stories.everyItem().tables.everyItem().columns.everyItem().getElements();
for ( var i = allCols.length-1; i >= 0; i--)
{
	var hrc = allCols[i].parent.headerRowCount
	var con = allCols[i].contents.slice(hrc)
	var a = con.toString().replace(/[,\uFEFF\s]/g,"")
    var regex = /^(-)+$/;
	if(regex.test(a))
		allCols[i].remove()
}

If you still have other use cases then as Uwe suggested it would be better if you hire someone to polish the code for you.

-Manan

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

LATEST

Hi Manan

I thank you very much for your precious help.

Tell me how i can pay you and ask for other jobs in the future

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi together,

Manan's script is working very well, just tested this with Miran's document, EasyCatalog Reader plug-in installed for InDesign 16.2.1 on Windows 10. Also m1b's script, the one corrected by Manan, is working as expected:

https://community.adobe.com/t5/indesign/delete-all-columns-containg-only/m-p/12173752#M436857

 

However, m1b's approach is more stringent, because every single cell is tested individually.

With Manan's own version also empty text cells will be handled as if they contain a MINUS HYPHEN character.

 

Regards,
Uwe Laubender

( ACP )

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi Laubender

I just tried both of the codes on my file but didn't succeed to get them work. I will retry if you say that's ok...

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

Hi Miran,

you provided a test InDesign document without any header or footer rows.

Also without graphic cells. Or other things we cannot know.

 

I suggest you make a paid job out of this and engage Manan or m1b.

 

Regards,
Uwe Laubender

( ACP )

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Explorer ,
Jul 13, 2021 Jul 13, 2021

Copy link to clipboard

Copied

hi again Laubender

You are right i totally didn't think it would be helpful to provide a complete file. Mea culpa 😕

And you are right, it is very important for me to have this script, so it would be normal if Manan or m1b want to function as a paid job.

Thank you for your help

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines