Copy link to clipboard
Copied
This should be a simple and common question, but most posts I found linked back to this:
https://community.adobe.com/t5/framemaker-discussions/find-replace/td-p/3581679#4032650
I tried the script there and failed. Some things that would help hopefully:
I'm trying to replace one name at the end of a document in the main flow (in the last table of the document). So the script only has to start at the end and when it makes the first replacement or leaves the table, it is done.
From the linked thread, I tried to use (obfuscating a bit):
FindAndReplaceString(app.activeDoc,app.activeDoc.MainFlowInDoc,'CHARLES T . SMITH','JOHN Q. PUBLIC', 'True');
And I got "Undefined is not an object"
Second question. Currently this name is in plain text in our FM template.
I'm considering putting it in a user variable - maybe named _Signature.
Would the script still find and replace it if I did this?
Or -
I have a script which updates the document with the latest Master Page Formats, but it's been a while since I've looked at it. I have these lines in the script:
doc.SimpleImportFormats (New_Template, formatFlags);
function FixCopyrightDate(doc){var variable;variable = doc.GetNamedVarFmt ("Current Date (Long)");variable.Fmt = "<$year>";}// -- End Fix CopyrightDate
Could either of these be (easily) modifed to update ONLY _Signature without updated ALL the other user variables as well?
I could test the last two items, but the experts on here probably know instantly and I still need the solution to the initial question.
Disregard the strike-thru text - I'm pretty sure I can update the user variables.
Let me know if anything is unclear.
Thanks in advance!!!
@frameexpert - Thank you and I appreciate the offer. I know from experience on this forum that your code is top-notch and I'll check with my manager about purchasing your script.
For now, I re-read CAREFULLY the linked thread and I was able to get Ian's script to work. I had two errors - first, the value for ConsiderCase should be 1, not 'True'. Second, my VBA background was showing through and came back to bite me.
Once I copied his function, you run it like this:
var activeDoc = app.ActiveDoc;
v
...
Copy link to clipboard
Copied
Hi Marshall, If you have budget, you might try my FindChangeBatch script at www.frameexpert.com/store. If you can afford the source code version, it will give you a lot of code that you can learn from and use in your own scripts. I can try to post some code here, but a find/change script requires a lot of code to do all of its tasks.
Copy link to clipboard
Copied
@frameexpert - Thank you and I appreciate the offer. I know from experience on this forum that your code is top-notch and I'll check with my manager about purchasing your script.
For now, I re-read CAREFULLY the linked thread and I was able to get Ian's script to work. I had two errors - first, the value for ConsiderCase should be 1, not 'True'. Second, my VBA background was showing through and came back to bite me.
Once I copied his function, you run it like this:
var activeDoc = app.ActiveDoc;
var flow = activeDoc.MainFlowInDoc;
var findString = 'CHARLES T. SMITH';
var replaceString = 'JOHN Q. PUBLIC';
// 0 = No, 1 = Yes for Consider Case.
var considerCase = 1;
FindAndReplaceString(activeDoc, flow, findString, replaceString, considerCase)
This (corrected) won't work, although it seems more compact and seems like it SHOULD work:
FindAndReplaceString(app.activeDoc,app.activeDoc.MainFlowInDoc,'CHARLES T. SMITH','JOHN Q. PUBLIC', 1);
This (corrected):
FindAndReplaceString('app.activeDoc','app.activeDoc.MainFlowInDoc','CHARLES T. SMITH','JOHN Q. PUBLIC', '1');
Gets to the called function, but then gives an error of "ActiveDoc.ObjectValid is not a function."
Thank you again for all the assistance and hopefully this helps others!!!
Copy link to clipboard
Copied
I forgot that I have a YouTube playlist on doing Find/Change with ExtendScript!
https://youtube.com/playlist?list=PLRPNZaAC4LoTosB8ClbFbFn2ijROFJUlJ&si=A7Rfk1zlRBb3bq4H