Copy link to clipboard
Copied
Hi all,
Long time lurker, first time poster. I am working in Adobe Acrobat Pro 2017, and created a fillable PDF for employee appraisals. To calculate the employee's score at the end of the form, I need to calculate the number of fields where text was entered (like the Excel "COUNTA" function) so I can divide that by the added total of ratings. I have everything figured out except the custom calculation script for totalling the number of fields that have text entered in them. I've spent the past 8 hours deep in the weeds in Google and this support community and have found numerous similar scenarios, but I can't get any of those scripts to work. I'm old, my brain is fried, I know zilch about JavaScript and would really, REALLY appreciate any insight or help.
For reference, the fields are named COM.01 through COM.18, and I just need to count the total number of fields containing text, leaving out any COM. fields that are blank.
Thanking you in advance.
See if this works for you:
var total = 0;
var fields = this.getField("COM").getArray();
for (var i=0; i<fields.length; i++) {
var f = (fields[i]).valueAsString;
if (f !="") total++;
}
event.value = total;
Copy link to clipboard
Copied
You can use this code as the custom calculation script of your text field:
var total = 0;
var fields = this.getField("COM").getArray();
for (var i=0; i<fields.length; i++) {
if (f.valueAsString!="") total++;
}
event.value = total;
If you want it to immediately display the relative amount of filled-in fields to the total, change the last line to:
event.value = total/fields.length;
Copy link to clipboard
Copied
Thank you very much. I copied and pasted that into the field where I need the result, but nothing happened when I entered text into the "COM." fields.
Copy link to clipboard
Copied
Edit: I pasted it into the custom calculation script in the field where I need the result. I AM TIRED, lol.
Copy link to clipboard
Copied
Change the value of one of those fields and then check the JS Console (Ctrl+J) for error messages.
If you can't figure it out please share the file with us for further help.
Copy link to clipboard
Copied
See if this works for you:
var total = 0;
var fields = this.getField("COM").getArray();
for (var i=0; i<fields.length; i++) {
var f = (fields[i]).valueAsString;
if (f !="") total++;
}
event.value = total;
Copy link to clipboard
Copied
This worked!!! Thank you SO MUCH!!! I can't tell you how much I appreciate it.
Copy link to clipboard
Copied
Hi!
I searched for this answer and your custom calculation is so very close to what I need. Can you tell me what the custom calculation would be for counting all filled fields containing a number value greater than 0? I would be so appreciative!
Copy link to clipboard
Copied
Try like this:
var total = 0;
var fields = this.getField("COM").getArray();
for (var i=0; i<fields.length; i++) {
var f = Number((fields[i]).valueAsString);
if (f > 0) total++;
}
event.value = total;
Copy link to clipboard
Copied
Hello! I, too, have been looking for hours for a custom calculation that will work for our employee appraisal form. I need something similar that will count all of the fields that contain a number between 1-4. For reference, the fields are named Rating1, Rating2, Rating3...Rating28. The problem I'm running into is that I need it to exclude any fields that have a 0 plugged in. I tried these codes and a few others I found on other threads here, but none of them have worked. I know nothing about this, so any help would be amazing!
Copy link to clipboard
Copied
For reference, the closest code I've gotten to work is:
var total = "";
for (var i=1; i<=28; i++) {
if (this.getField("Rating"+i).valueAsString != "") total++;
}
event.value = total;
but it doesn't exclude any fields that have a 0.
Copy link to clipboard
Copied
Change:
!= ""
To:
!== ""
Copy link to clipboard
Copied
Nope, no luck there. It's still counting the fields with a 0.
Copy link to clipboard
Copied
This will count only numbers between 1-4:
var total = "";
for (var i=1; i<=28; i++) {
var f = Number(this.getField("Rating"+i).valueAsString);
if (f > 0 && f <= 4) total++;}
event.value = total;
Copy link to clipboard
Copied
That worked! Thank you so much!!!