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

How do I increment a number in successive fields in a table column by 1 by a script or calculation?

Explorer ,
Jul 06, 2022 Jul 06, 2022

Copy link to clipboard

Copied

I have a table with 50 fillable rows; the first column indicates a line number. The field name is txtLnNo1 for the first, txtLnNo2 for the second, and so forth. I would like for it to auto-generate the line number in each field, and when an additional page is generated, have it start with the last number of the previous page plus 1 (i.e., for page 2, 51; for page 3, 101; etc.) I did this before in Adobe LiveCycle Designer at a previous job using a script like "this.rawValue = this.parent.index +1;" but with this job, I am using InDesign exported to Acrobat. I have attached the PDF for reference. Thank you for being so helpful.

TOPICS
How to , JavaScript

Views

1.6K

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
2 ACCEPTED SOLUTIONS
Community Expert ,
Jul 07, 2022 Jul 07, 2022

Copy link to clipboard

Copied

Copy-paste this script in the JS Console, select all and hit ENTER.

This script uses the field name number as the field value.
It works regardless of the number of fields and the number of pages.

 

for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type == "text") && (/txtLnNo/.test(oFld.name))) {
var sNom = oFld.name.split("o");
var sSuffix = sNom.pop();
oFld.value = sSuffix;
}
}

 

Capture_553.png

View solution in original post

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 07, 2022 Jul 07, 2022

Copy link to clipboard

Copied

Depending on what you want to do this script might be even better as it also assigns the value as the "default value" (orange line added).
This allows a Reset/clear without deleting the fields value.

 

for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type == "text") && (/txtLnNo/.test(oFld.name))) {
var sNom = oFld.name.split("o");
var sSuffix = sNom.pop();

oFld.value = sSuffix;
oFld.defaultValue = sSuffix;
}
}

View solution in original post

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 07, 2022 Jul 07, 2022

Copy link to clipboard

Copied

Copy-paste this script in the JS Console, select all and hit ENTER.

This script uses the field name number as the field value.
It works regardless of the number of fields and the number of pages.

 

for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type == "text") && (/txtLnNo/.test(oFld.name))) {
var sNom = oFld.name.split("o");
var sSuffix = sNom.pop();
oFld.value = sSuffix;
}
}

 

Capture_553.png

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 07, 2022 Jul 07, 2022

Copy link to clipboard

Copied

Depending on what you want to do this script might be even better as it also assigns the value as the "default value" (orange line added).
This allows a Reset/clear without deleting the fields value.

 

for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type == "text") && (/txtLnNo/.test(oFld.name))) {
var sNom = oFld.name.split("o");
var sSuffix = sNom.pop();

oFld.value = sSuffix;
oFld.defaultValue = sSuffix;
}
}

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 07, 2022 Jul 07, 2022

Copy link to clipboard

Copied

Thank you so much, JR! This works great! When I later find the "add page" script I have saved and implement it, I will see how it will work with that.

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 08, 2022 Jul 08, 2022

Copy link to clipboard

Copied

I have one more question about this script. When I use a script to spawn another page from the first, will the numbering continue from the last number on the previous page or restart at 1? Thank you again 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
Community Expert ,
Jul 08, 2022 Jul 08, 2022

Copy link to clipboard

Copied

The script uses the number at the end of the field name (after the "o") to assign its value.
So the numbering will start at 1 on each new page.

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 08, 2022 Jul 08, 2022

Copy link to clipboard

Copied

Thank you, JR. I saw that when you first presented the code, but it slipped my mind when I posted. My next step would be to find and tweak the script that spawns a new page to add 50 to the numbers at the end of the field names for the second page, 100 to the third page, and so on. 

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 09, 2022 Jul 09, 2022

Copy link to clipboard

Copied

Will this template be hidden?

Is this the only page in the document or are there other different pages that can be interspersed?

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 12, 2022 Jul 12, 2022

Copy link to clipboard

Copied

There will be other pages interspersed in the document. This particular page will be showing initially, and if more are needed for input, the user will press an "Add Page" button to generate additional pages. I currently have a simple script to generate one page at a time, but later, I look to add a prompt to input the number of pages to create multiples. This page is one of two tables that will need additional pages generated. This form was initially built in Excel, and the two tables have up to 500 rows for input. I am using InDesign to recreate them as fillable PDFs.

 

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, 2022 Jul 13, 2022

Copy link to clipboard

Copied

Assuming this is the only page that can be spawned in the document this script will work.

It use the "spawned page number" instead of the page number (spawned fields are renamed like this: P1.templatexxxx.fieldName ) so it's independent of any interleaved pages.

 

 

for (var i = 0; i < this.numFields; i++) {
var oFld = this.getField(this.getNthFieldName(i));
if ((oFld.type == "text") && (/txtLnNo/.test(oFld.name))) {
if (oFld.page == 0) { // first page
var sNom = oFld.name.split("o");
var sSuffix = sNom.pop();

oFld.value = sSuffix;
oFld.defaultValue = sSuffix;
}
else { // spawned pages
var sNom = oFld.name.split("o");
var sSuffix = sNom.pop();
var sNom = oFld.name.split(".");
var sPrefix = sNom.shift();
var sPrefix = sPrefix.replace(/P/, "");
var n2Add = (50 * (Number(sPrefix)));

oFld.value = Number(n2Add) + Number(sSuffix);
oFld.defaultValue = Number(n2Add) + Number(sSuffix);
}
}
}

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, 2022 Jul 13, 2022

Copy link to clipboard

Copied

Thank you, JR! There are two other pages to be spawned in the document, so will I be able to use the code on all three of them? They will all have the line number column (txtLnNo) to help the user distinguish the number of items and provide a sense of order within each table. Other than those three, all other pages in the document will not be spawned. There are nine pages, and I have six of them developed so far.  As I mentioned in a prior reply, this form document was originally built in Excel, where those three pages have 500 rows to have the capacity for large orders. There are nine pages, and I have six of them developed so far.

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 14, 2022 Jul 14, 2022

Copy link to clipboard

Copied

" will I be able to use the code on all three of them?"

You must run this script one time to fill the existing page, and you must run it each time a new page is spawned.

This will overwrite the already filled fields but it doesn't matter since it doesn't change their number.

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
New Here ,
Apr 19, 2024 Apr 19, 2024

Copy link to clipboard

Copied

LATEST

How do I incriment a field (Count) in a repeatable subform with letter as I add new instances of that subform. The field I am updating is the first filed in a line of fields.

 

Eg.

 

A. 

B. 

C. 

D. 

 

Joe368587850czc_0-1713556602253.png

The Sub Form is (topmostSubform.Page_1.Para3.Interviewed_Personnel_subform) and the Field I want to update is 

topmostSubform.Page_1.Para3.Interviewed_Personnel_subform.Count. I use the "+" to create a new instance of (Interviewed_Personnel_subform) and that is when I want the new instance of (Count) with the next letter.

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