[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt PStyle suchen und ersetzen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

PStyle suchen und ersetzen

-hans-
Beiträge gesamt: 748

21. Jan 2011, 15:06
Beitrag # 1 von 17
Bewertung:
(9254 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

ich möchte Absatzformate in einer Liste (im Beispiel nur 1 Element) per suchen und ersetzen neu zuweisen ...
Das Erstellen des Arrays scheitert schon? oder die Übergabe an den Handler? Spätestens jedoch im Handler beim ersten Suchen-Befehl ;-)

Code
 var theList =  new Array ("Kommentar-Name") ; 
var newList = new Array ("Kommentar-Name-4C") ;
var countTheList = theList.length;
var oldPStyle;
var newPStyle;

for (var i=0; i<countTheList; i++) {
oldPStyle = theList[i];
newPStyle = newList[i];
switchParaStyle(oldPStyle, newPStyle); //Aufruf Handler
}

function switchParaStyle(styleToChange, theNewStyle) {

app.changeTextPreferences = null;
app.findTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = app.activeDocument.paragraphStyles.itemByName(styleToChange);
app.changeTextPreferences.appliedParagraphStyle = app.activeDocument.paragraphStyles.itemByName(theNewStyle);
app.activeDocument.changeText();
app.changeTextPreferences = null;
app.findTextPreferences = null;


}

X

PStyle suchen und ersetzen

Martin Fischer
  
Beiträge gesamt: 12783

21. Jan 2011, 16:07
Beitrag # 2 von 17
Beitrag ID: #462499
Bewertung:
(9233 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

was ist die Fehlermeldung?
Sind die Absatzformate angelegt?
Was sagt der Debugger?

Hier (unter InDesign CS5) funktioniert Dein Code.


als Antwort auf: [#462493]

PStyle suchen und ersetzen

fabiantheblind
Beiträge gesamt:

21. Jan 2011, 16:20
Beitrag # 3 von 17
Beitrag ID: #462501
Bewertung:
(9223 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Du hast vergessen durch die Listen zu iterieren.(Zumindest in der Version die zuerst hier stand und bei mir im Posteingang war :))

So funktioniert es bei mir (ID CS 5):

Code
 
var theList = new Array() ;
theList[0] = "Kommentar-Name";

var newList = new Array () ;
newList[0] = "Kommentar-Name-4C";
var countTheList = theList.length;
var oldPStyle;
var newPStyle;

for (var i=0; i<countTheList; i++) {
oldPStyle = theList[i];
newPStyle = newList[i];
switchParaStyle(oldPStyle, newPStyle); //Aufruf Handler
}

function switchParaStyle(styleToChange, theNewStyle) {

app.changeTextPreferences = null;
app.findTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = app.activeDocument.paragraphStyles.item(styleToChange);
app.changeTextPreferences.appliedParagraphStyle = app.activeDocument.paragraphStyles.item(theNewStyle);
app.activeDocument.changeText();
app.changeTextPreferences = null;
app.findTextPreferences = null;


}



als Antwort auf: [#462493]
(Dieser Beitrag wurde von fabiantheblind am 21. Jan 2011, 16:27 geändert)

PStyle suchen und ersetzen

-hans-
Beiträge gesamt: 748

21. Jan 2011, 17:11
Beitrag # 4 von 17
Beitrag ID: #462505
Bewertung:
(9208 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Vielen lieben Dank für Eure Antworten,

mein Script funktioniert (oh Wahnsinnswunder :) ) tatsächlich ! ... leider nur grundsätzlich :(
Ich hatte nicht berücksichtigt, dass die angesprochenen Formate Teil einer Formatgruppe sind. Ich werd' mal die Suche hier anschmeissen und herauszubekommen wie ich diese ansprechen kann ... sonst melde ich mich nochmal ;-)

Schönes Wochenende :)


als Antwort auf: [#462501]

PStyle suchen und ersetzen

fabiantheblind
Beiträge gesamt:

21. Jan 2011, 17:14
Beitrag # 5 von 17
Beitrag ID: #462506
Bewertung:
(9206 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das würde mich auch sehr interessieren wie du Formatgruppen ansprechen kannst. Das Problem hatte ich auch bereits.
Wenn du eine Lösung findest würde ich mich sehr freuen sie auch zu erfahren :)

Grüsse

:F


als Antwort auf: [#462505]

PStyle suchen und ersetzen

Martin Fischer
  
Beiträge gesamt: 12783

21. Jan 2011, 17:22
Beitrag # 6 von 17
Beitrag ID: #462508
Bewertung:
(9192 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Als paragraphStyleGroup.

Beispiel:
Code
app.documents.firstItem().paragraphStyleGroups.itemByName('meine Gruppe').paragraphStyles.itemByName( 'mein Absatzformat' ); 



als Antwort auf: [#462506]

PStyle suchen und ersetzen

Neil77
Beiträge gesamt: 287

21. Jan 2011, 17:54
Beitrag # 7 von 17
Beitrag ID: #462513
Bewertung:
(9169 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Oder über Document.allParagraphStyles
Zu beachten ist dann aber, dass es sich dabei um ein Array handelt und nicht (wie bei paragraphStyles) um eine Collection, was das Handling umständlicher machen kann.

Grüße, Martin


als Antwort auf: [#462508]
(Dieser Beitrag wurde von Neil77 am 21. Jan 2011, 17:54 geändert)

PStyle suchen und ersetzen

Martin Fischer
  
Beiträge gesamt: 12783

21. Jan 2011, 18:12
Beitrag # 8 von 17
Beitrag ID: #462516
Bewertung:
(9153 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf: ... um ein Array handelt ..., was das Handling umständlicher machen kann.


... z.B. weil sie nicht mehr über itemByName(), sondern nur über ihren Index ansprechbar sind.


als Antwort auf: [#462513]

PStyle suchen und ersetzen

fabiantheblind
Beiträge gesamt:

23. Jan 2011, 09:52
Beitrag # 9 von 17
Beitrag ID: #462614
Bewertung:
(9051 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
also gibt es auch kein:
Code
Document.allParagraphStyles.item() 

?
Das ist irgendwie schade. Da muss man ja dann immer durch alle durchschleifen und immer den Namen Abfragen.

Gibt es nicht die Möglichkeit mir aus dem "Pool" der Formate, egal ob in einer Gruppe oder nicht, eines mit seinem Namen zu holen?


als Antwort auf: [#462516]

PStyle suchen und ersetzen

Martin Fischer
  
Beiträge gesamt: 12783

23. Jan 2011, 11:01
Beitrag # 10 von 17
Beitrag ID: #462623
Bewertung:
(9038 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Du könntest Dir eine Funktion schreiben, welche Dir zu einem bestimmten Absatzformatnamen das bzw. die passenden Elemente des Arrays ermittelt.
Dabei könnest Du etwa auch assoziative Arrays mit den Namen der AF als Namensgeber erzeugen.

Wegen der Verteilung der AF über verschiedene Gruppen ist es möglich, dass es mehrere AF mit einem bestimmten Namen gibt (deswegen der Vorschlag mit den Arrays).


als Antwort auf: [#462614]

PStyle suchen und ersetzen

fabiantheblind
Beiträge gesamt:

23. Jan 2011, 11:09
Beitrag # 11 von 17
Beitrag ID: #462626
Bewertung:
(9031 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ui jui jui,
Zitat assoziative Arrays

das ist ja cool.
Danke für den Tipp Martin.

:F


als Antwort auf: [#462623]

PStyle suchen und ersetzen

fabiantheblind
Beiträge gesamt:

23. Jan 2011, 11:30
Beitrag # 12 von 17
Beitrag ID: #462629
Bewertung:
(9019 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ungefähr sowas!

Code
var doc = app.activeDocument; 

var hashList = buildHashList(doc);

var oldPStyle = hashList["oldParStyle"];
var newPStyle = hashList["newParStyle"];

switchParaStyle(doc,oldPStyle, newPStyle);


function switchParaStyle(doc,styleToChange, theNewStyle) {

app.changeTextPreferences = null;
app.findTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = styleToChange;
app.changeTextPreferences.appliedParagraphStyle = theNewStyle;
app.activeDocument.changeText();
app.changeTextPreferences = null;
app.findTextPreferences = null;

}

function buildHashList(doc){
var theList = doc.allParagraphStyles;
var result =new Array();

for(var i = 0; i < theList.length; i++){

result[theList[i].name] = theList[i];

}
return result;
}



als Antwort auf: [#462623]

PStyle suchen und ersetzen

-hans-
Beiträge gesamt: 748

23. Jan 2011, 11:42
Beitrag # 13 von 17
Beitrag ID: #462631
Bewertung:
(9006 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Guten Morgen,

hab' mir auch im Blindflug, da ich gerade kein ID zur Verfügung habe, gebastelt ... Eure letzten Postings hatte ich in der Bastelzeit leider noch nicht gelesen (hole ich jetzt nach :) )

Hoffe das funzt auch ...
Code
var AF = new Array(); 

AF[0] = new Object();
AF[0]["aGroup"] = "Gruppe01";
AF[0]["pStyleOld"] = "AF1";
AF[0]["pStyleNew"] = "AF2";

AF[1] = new Object();
AF[1]["aGroup"] = "Gruppe01";
AF[1]["pStyleOld"] = "AF3";
AF[1]["pStyleNew"] = "AF4";


for (var i = 0; i < AF.length; i++) {
alert(AF[i]["Group"])
aGroup = AF[i]["aGroup"]
pStyleOld = AF[i]["pStyleOld"]
pStyleNew = AF[i]["pStyleNew"]
switchParaStyle(aGroup, pStyleOld, pStyleNew); //Aufruf Handler

}


function switchParaStyle(theAfGroup, styleToChange, theNewStyle) {

app.changeTextPreferences = null;
app.findTextPreferences = null;
app.findTextPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyleGroups.itemByName(theAfGroup).paragraphStyles.itemByName(styleToChange);
app.changeTextPreferences.appliedParagraphStyle = app.documents.firstItem().paragraphStyleGroups.itemByName(theAfGroup).paragraphStyles.itemByName(theNewStyle);
app.activeDocument.changeText();
app.changeTextPreferences = null;
app.findTextPreferences = null;


}



als Antwort auf: [#462629]

PStyle suchen und ersetzen

fabiantheblind
Beiträge gesamt:

23. Jan 2011, 11:45
Beitrag # 14 von 17
Beitrag ID: #462632
Bewertung:
(9004 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
hm, das ist doch nicht so gut wenn es 2 Formate mit dem gleichen Namen geben kann.
Wobei ich finde das 2 Formate mit dem gleichen Namen eine Unart ist.
Eine Lösung wäre vorher alle Namen gegeneinander abzugleichen und bei einem Treffer den Namen zu ändern.

Schönen Sonntach wünsch ich euch.

:F


als Antwort auf: [#462629]

PStyle suchen und ersetzen

Martin Fischer
  
Beiträge gesamt: 12783

23. Jan 2011, 11:50
Beitrag # 15 von 17
Beitrag ID: #462634
Bewertung:
(9003 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Das sieht schon ziemlich gut aus.
Werde ich so in meine Schnippsel-Sammlung übernehmen. ;-)

Allerdings braucht's noch ne Vorkehrung für den Fall, dass ein assoziatives Array mit einem best. Namen bereits besteht (aus einer anderen Formatgruppe; vgl. den obigen Hinweis zu mgl. Mehrfachvorkommen eines Namens). Du müsstest das neue AF mit demselben Namen dem assoziativen Array hinzupushen.

Ausserdem würde ich der Funktion nicht doc übergeben, sondern - spezifischer - doc.allParagraphStyles. Möglicherweise brauchst Du diese Funktion noch für andere Dinge wie doc.allCharacterStyles o.ä.


als Antwort auf: [#462629]
X