Copy link to clipboard
Copied
Hi everybody.
I have to change the design AND the content of some tables. The necessary part is done and works perfectly. Now I need two different conditions on parts of the content. In a cell there should come an URL with two endings. lets say: www.something.deat . Each of the endings needs its own condition.
That´s the code:
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "(?<=Druck- und Nebenkosten sowie weitere Farben: www.something\\.)de(?=at)";
app.changeGrepPreferences.appliedConditions = ["DE"];
app.changeGrep();
app.findGrepPreferences = NothingEnum.nothing; // Suchfeld leeren
app.changeGrepPreferences = NothingEnum.nothing; // Ersetzen-Feld leeren
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "(?<=Druck- und Nebenkosten sowie weitere Farben: www.something\\.de)at$";
app.changeGrepPreferences.appliedConditions = ["AT"];
app.changeGrep();
But this change all the endings in the entire document. How can I apply it only on the content of the selected text frame (containing a table)?
To answer to your first question, you would change "app.changeGrep()" to "app.selection[0].parentStory.changeGrep()" assuming a text frame is selected.
"But this change all the endings in the entire document."
No. It will do the changes in all open documents!
With a selected text frame this could work; depending on its contents it could also throw an error:
app.selection[0].texts[0].changeGrep();
Would that cover the texts of all text cells of a given table in that selected text frame?
Just test it. Would it work in the GUI? No? Then select the table cells before running the GREP.
Better show a screenshot of your case where a text frame, a
...To apply no conditions, use
app.changeGrepPreferences.appliedConditions = [];
> An another strange thing is, that I can´t use variables for the conditions
Yes, you can:
app.changeGrepPreferences.appliedConditions = [myConditionDE, myConditionAT];
Copy link to clipboard
Copied
The simple question is: how can these conditions be applied to part of a text? Text is written into a variable / constant, or it comes from it. How can you capture the endings and convert them into conditional text?
here the entire script:
var myDoc = app.documents[0];
var myPage = myDoc.pages[0];
var allSelection = myDoc.selection;
var mySelection = allSelection[0];
var numSelection = allSelection.length;
var arrayPageItems = app.activeDocument.pageItems.everyItem().getElements();
var PStyleGroup = myDoc.paragraphStyleGroups.itemByName('SF_Artikel_Tabellen');
var PStyleMenge = PStyleGroup.paragraphStyles.itemByName('SF_Tabellen_Menge');
var PStyleFuss = PStyleGroup.paragraphStyles.itemByName('SF_Tabellen_linkeSpalte');
var Fusszeile = "Druck- und Nebenkosten sowie weitere Farben: www.xxxxx.deat"
var CStyle = myDoc.cellStyles.itemByName('SF_Tabelle_Standard_Koerper');
auswahlCheck ();
function auswahlCheck () {
if(allSelection.length == "0") {
alert("Es wurde keine Auswahl getroffen!");
exit(); //Abbruch
}
for (var i=0; i < numSelection; i++) {
if (!allSelection[i] instanceof TextFrame) {
alert("Bitte wähle einen Textrahmen aus! " + allSelection[i] + " ist KEIN Textrahmen!");
exit(); //Abbruch
}
else if (allSelection[i].tables.length < 1) {
alert("Der Textrahmen beinhaltet keine Tabelle!");
exit(); //Abbruch
}
}
runAll();
function runAll() {
for (var i=0; i < numSelection; i++) {
myTable = allSelection[i].tables[0];
clearOverrides();
tableStyles();
enableTextFrameAutoSizingOptions: true;
allSelection[i].textFramePreferences.useNoLineBreaksForAutoSizing = true;
allSelection[i].textFramePreferences.autoSizingType = AutoSizingTypeEnum.HEIGHT_ONLY;
allSelection[i].textFramePreferences.autoSizingReferencePoint = AutoSizingReferenceEnum.TOP_CENTER_POINT; }
}
function clearOverrides() {
for (n=0; n < myTable.rows.length; n++) {
for (i=0; i < myTable.rows[n].cells.length; i++) {
myTable.rows[n].cells[i].clearCellStyleOverrides(false);//Alle Zellen-Formate löschen
myTable.rows[n].cells[i].paragraphs.everyItem().clearOverrides(OverrideType.ALL);//Alle Absatz-Formate löschen
myTable.rows[n].cells[i].texts[0].clearOverrides(OverrideType.ALL);
}
}
}
function tableStyles() {
var TStyle = myDoc.tableStyles.itemByName('SF_Tabelle_Basis');
myTable.appliedTableStyle = TStyle;
var myFirstRow = myTable.rows[0];
var myLastRow = myTable.rows[-1];
var meineMenge = myFirstRow.cells.firstItem().paragraphs[0];
meineMenge.appliedParagraphStyle = PStyleMenge;
if(myFirstRow.rowType != RowTypes.HEADER_ROW){
myFirstRow.rowType = RowTypes.HEADER_ROW;
}
if(myLastRow.cells.length > 1){
myLastRow.cells.everyItem().appliedCellStyle = CStyle;
myLastRow.cells.firstItem().paragraphs[0].appliedParagraphStyle = PStyleFuss;
}else{
myLastRow.cells.firstItem().contents = Fusszeile;}
applyCondition();
}
function applyCondition() {
myConditionDE = app.activeDocument.conditions.item("DE");
myConditionAT = app.activeDocument.conditions.item("AT");
if (!myConditionDE.isValid) {
myConditionDE = app.activeDocument.conditions.add ({name:"DE",
indicatorMethod:ConditionIndicatorMethod.USE_HIGHLIGHT, indicatorColor:UIColors.BLUE});
}
if (!myConditionAT.isValid) {
myConditionAT = app.activeDocument.conditions.add ({name:"AT",
indicatorMethod:ConditionIndicatorMethod.USE_HIGHLIGHT, indicatorColor:UIColors.RED, visible:false});
}
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "(?<=Druck- und Nebenkosten sowie weitere Farben: www.xxxxxx\\.)de(?=at)";
app.changeGrepPreferences.appliedConditions = ["DE"];
app.changeGrep();
app.findGrepPreferences = NothingEnum.nothing; // Suchfeld leeren
app.changeGrepPreferences = NothingEnum.nothing; // Ersetzen-Feld leeren
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "(?<=Druck- und Nebenkosten sowie weitere Farben: www.xxxxxx\\.de)at$";
app.changeGrepPreferences.appliedConditions = ["AT"];
app.changeGrep();
myDoc.conditions.itemByName("DE").visible = false;
myDoc.conditions.itemByName("DE").visible = true;
}
function objectFormat() {
myTable.parent.appliedObjectStyle = objForm;
}
}
Copy link to clipboard
Copied
Hi, cmoke:
In the example script "FindChangeByList.jsx" installed with my InDesign CS5.5 I see that the find/replace operation can be restricted to coincidences of CharacterStyles. Maybe you can search throught a specific character style used only in your tables with the property "appliedCharacterStyle", a property of "changeGrepPreferences".
This is a bit confusing to me (tables and conditions) so this is an approach according to my level.
Good luck!
Copy link to clipboard
Copied
maybe that could be a way to the solution. But I need only two characters (or: two times two characters) to apply the condition.
thanks anyway
Copy link to clipboard
Copied
To answer to your first question, you would change "app.changeGrep()" to "app.selection[0].parentStory.changeGrep()" assuming a text frame is selected.
Copy link to clipboard
Copied
Okay, it seems to be what I imagined. But how do you get just the characters you need ("de" and "at")? They are part of the content of my footer: www.xxxxxxxxx.deat
Copy link to clipboard
Copied
"But this change all the endings in the entire document."
No. It will do the changes in all open documents!
With a selected text frame this could work; depending on its contents it could also throw an error:
app.selection[0].texts[0].changeGrep();
Would that cover the texts of all text cells of a given table in that selected text frame?
Just test it. Would it work in the GUI? No? Then select the table cells before running the GREP.
Better show a screenshot of your case where a text frame, a text or table cells are selected.
And if a table is involved please indicate if the table rows are running through different text frames.
Thanks,
Uwe Laubender
( ACP )
Copy link to clipboard
Copied
Hello guys.
and thank you for the paticipation and the answers.
Sorry for being abcent for a while. The issue is still current. But now I have an other problem with my scripts. More urgent. I work on two platforms: in the office with Mac, at homeoffice on Windows. Now I have the problem, that the script I made in the office and worked well, now it doesn´t work on my Windows-PC.
This one will be continued after the new one is solved.
Copy link to clipboard
Copied
Okay, I´ve got it:
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "^.+$";
app.changeGrepPreferences.appliedConditions = ["[Ohne Bedingung]"];
app.selection[i].tables[0].rows[-1].changeGrep();
app.findGrepPreferences = NothingEnum.nothing; // Suchfeld leeren
app.changeGrepPreferences = NothingEnum.nothing; // Ersetzen-Feld leeren
app.findGrepPreferences = NothingEnum.nothing; // Suchfeld leeren
app.changeGrepPreferences = NothingEnum.nothing; // Ersetzen-Feld leeren
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "(?<=www.xxxxx.)de";
app.changeGrepPreferences.appliedConditions = ["DE"];
app.selection[i].tables[0].rows[-1].changeGrep();
app.findGrepPreferences = NothingEnum.nothing; // Suchfeld leeren
app.changeGrepPreferences = NothingEnum.nothing; // Ersetzen-Feld leeren
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = "(?<=www.xxxx.de)at";
app.changeGrepPreferences.appliedConditions = ["AT"];
app.selection[i].tables[0].rows[-1].changeGrep();
app.findGrepPreferences = NothingEnum.nothing; // Suchfeld leeren
app.changeGrepPreferences = NothingEnum.nothing; // Ersetzen-Feld leeren
myDoc.conditions.itemByName("AT").visible = true;
myDoc.conditions.itemByName("AT").visible = false;
... except to apply "no condition" to a text. In german its name is "Keine Bedingung", but it doesn´t recognize it.
An another strange thing is, that I can´t use variables für the conditions name like:
myConditionDE = app.activeDocument.conditions.item("DE");
myConditionAT = app.activeDocument.conditions.item("AT");
myConditionNoCond = app.activeDocument.conditions.item("Ohne Bedingung");
😞
Copy link to clipboard
Copied
To apply no conditions, use
app.changeGrepPreferences.appliedConditions = [];
Copy link to clipboard
Copied
> An another strange thing is, that I can´t use variables for the conditions
Yes, you can:
app.changeGrepPreferences.appliedConditions = [myConditionDE, myConditionAT];
Copy link to clipboard
Copied
Thank you Peter.
It's the correct answer, but I can't mark it for the question above. 🙂
Copy link to clipboard
Copied
I did it for you.
Best,
Uwe Laubender
( ACP )