Bin dabei über ein Skript meine Absatzformate wechseln zu lassen. Dies funktioniert soweit auch wunderbar (wenn das Skript bei den Absatzformat-Gruppen nicht scheitern würde)..
Das macht für mich keinen Sinn - zumal es bei "findTextPreferences" keine Möglichkeit gibt eine Angabe zur Gruppierung zu machen.
Oder ist dieser Ansatz für meinen Zweck nicht zu gebrauchen?
Doch, das geht schon. Anstelle des Strings für das Absatzformat musst Du eben ein Objekt paragraphStyle (als Kind eines Objekts paragraphStyleGroup) angeben:
Fehler: Ungültiger Wert für Einrichtung der Eigenschaft "appliedParagraphStyle". String,ParagraphStyle or NothingEnum enumerator erwartet, aber "PB_Headline_9pt" erhalten.
Find ich jetzt komisch..
Bei deiner und meiner abgeänderten Version:
var myDocument = app.activeDocument; var myTextfields = myDocument.textFrames;
Ist natürlich ganz blöd weil die Formate ja in verschiedenen Gruppen sein können.. also muss ich noch eine Schleife reinwürgen - aber sollte alles irgendwie klappen.
Das mit "isValid" kenn ich nicht, werd in der Doku mal schauen.
Hast mir aber schon sehr weitergeholfen, großes Dankeschön!
Ist natürlich ganz blöd weil die Formate ja in verschiedenen Gruppen sein können.. also muss ich noch eine Schleife reinwürgen - aber sollte alles irgendwie klappen.
Noch blöder ist, wenn ein AF mit einem bestimmten Namen in mehreren Gruppen auftaucht. Welches ist dann das richtige? Das erste? Dann könntest Du die Schleife an dieser Stelle abbrechen.
Das mit "isValid" kenn ich nicht, werd in der Doku mal schauen.
Damit prüfst Du ab CS4, ob ein Objekt gültig – in diesem Fall = vorhanden – ist. true, wenn vorhanden false, wenn nicht vorhanden
Hallo, zusammen! Oder man arbeitet mit allParagraphStyles, dann braucht man sich um die Hierachie der Verzeichnisse keine Gedanken mehr zu machen. Fast nicht, denn wenn ich folgenden Code überdenke, dann könnte das falsche Absatzformat zugewiesen werden, wenn der gleiche Name zweimal in irgendwelchen Formatgruppen auftaucht:
var d = app.documents.firstItem();
var SUCHE = "PB_Headline_9pt"; var ERSETZE = "Artikelnr_9pt";
var allPS = d.allParagraphStyles; var allPSindexNum;
Man könnte natürlich in der for-Schleife auch einen Array füttern und abfragen, ob mehr als 1 Eintrag vorhanden ist, bevor man ersetzt. ***** Mit herzlichem Gruß, Uwe Laubender
(Dieser Beitrag wurde von Uwe Laubender am 10. Jun 2010, 10:43 geändert)
Hallo, zusammen! Oder man arbeitet mit allParagraphStyles, dann braucht man sich um die Hierachie der Verzeichnisse keine Gedanken mehr zu machen. Fast nicht, denn wenn ich folgenden Code überdenke, dann könnte das falsche Absatzformat zugewiesen werden, wenn der gleiche Name zweimal in irgendwelchen Formatgruppen auftaucht:
var d = app.documents.firstItem();
var SUCHE = "PB_Headline_9pt"; var ERSETZE = "Artikelnr_9pt";
var allPS = d.allParagraphStyles; var allPSindexNum;
app.findTextPreferences.appliedParagraphStyle = SUCHE; app.changeTextPreferences.appliedParagraphStyle = d.allParagraphStyles[allPSindexNum]; var StyleReplace = d.changeText();
Der Ansatz ist gut und mit allParagraphStyles hatte ich es auch schon probiert, aber es scheitert wieder am String mit der selben Fehlermeldung ganz nach dem Zitat Motto vom M. Fischer:
Der String ist für Faule und funktioniert unter bestimmten Umständen.
Und damit gehts leider auch nicht:
var SUCHE = myDocument.paragraphStyles.itemByName("Absatzformat1"); var ERSETZE = myDocument.paragraphStyles.itemByName("Absatzformat2");
*edit* ja gut damit gehts auch nicht, weil so das Objekt ausgegeben wird.. ich brauche dann eher sowas wie:
var SUCHE = myDocument.paragraphStyles.itemByName("Absatzformat1").name
Aber natürlich klappt das auch nicht..
(Dieser Beitrag wurde von painschen am 10. Jun 2010, 17:35 geändert)
Das klappt nicht mal in der Form und ich erhalte immer den Fehler 30477 (Fehlerzeichenfolge: Ungültiger Wert blablabla String erwartet aber "PB_Headline_9pt" erhalten.. das ist doch ein String - wieso nervt mich InDesign trotzdem damit?
Hab sogar String(); getestet..
:(
(Dieser Beitrag wurde von painschen am 11. Jun 2010, 11:19 geändert)
Uwe's Version hat ebenfalls nur dann funktioniert, wenn keine Gruppen verwendet wurden.
Hm. Das lag an meinem einfachen Versuchsaufbau. Bei mir hat's jedenfalls funktioniert, wenn das Zielformat in einer Gruppe lag. Auf die Quelle allerdings, das gebe ich zu, hatte ich nicht geachtet… ***** Mit herzlichem Gruß, Uwe Laubender
Hallo Christoph, die genannte Zeile kannst Du nicht mit dem Parameter false ergänzen. Das Skript muss anders strukturiert werden.
Was Du machen kannst:
1. Alle Texte suchen und die Fundstücke in ein Array speichern. 2. Das Array der gefundenen Textstellen in einer Schleife durchgehen und mit applyParagraphStyle() das gewünschte Format mit dem gewünschten Parameter zuweisen.
Also überhaupt nicht mit changeTextPreferences oder changeText() arbeiten.
Ich weiß jetzt nicht von welcher Version des Skripts weiter oben im Thread Du ausgehst, aber die Geschichte könnte dann folgendermaßen funktionieren:
Einen Textrahmen mit zwei Absätzen auswählen:
Im ersten Absatz zugewiesen das Absatzformat, das ersetzt werden soll. Im zweiten Absatz zugewiesen das Absatzformat, das das Absatzformat ersetzt.
/* Text frame with two paragraphs selected. First paragraph formatted with OLD PARGARAPH STYLE Second paragraph formatted with NEW PARAGRAPH STYLE */
( function() { var oldFindChangeTextOptions = app.findChangeTextOptions.properties;
var paraStyleOld = app.selection[0].paragraphs[0].appliedParagraphStyle; var paraStyleNew = app.selection[0].paragraphs[1].appliedParagraphStyle;
app.findTextPreferences.properties = { appliedParagraphStyle : paraStyleOld /* Use more property/value pairs if necessary*/ };
// Restrict or widen your scope: app.findChangeTextOptions.properties = { includeFootnotes : true , includeHiddenLayers : true , includeMasterPages : true /* others as well, see DOM documentation e.g. for InDesign CS6 http://jongware.mit.edu/idcs6js/pc_FindChangeTextOption.html */ };
// Scope here is document: var resultArray = app.documents[0].findText( true ); // If true, returns the results in reverse order.
for( var n=0; n<resultArray.length; n++ ) { resultArray[n].applyParagraphStyle( paraStyleNew , false ); // If true, clear any text attributes before applying the style. (Optional) (default: true) };
Das Problem: Im fünften Absatz geht die manuelle Auszeichnung (kursiv und fett) verloren. Und: Der dritte Absatz wird komischerweise mit dem Format "Absatzformat 2" formatiert. Hier sollte nichts passieren, da das Format "Untertitel" nicht vorhanden ist.
Hallo Christoph, lies Dir mal in Ruhe meine Antwort und auch den Code dazu durch. Da hast Du bereits Deine Lösung. Für ein einziges Vorher/Nachher-Absatzformatpaar. ***** Mit herzlichem Gruß, Uwe Laubender