[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Absatzformatgruppen

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

Absatzformatgruppen

Rubberduck
Beiträge gesamt: 7

13. Mär 2016, 16:42
Beitrag # 1 von 9
Bewertung:
(3888 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

zunächst einmal vielen Dank für die Aufnahme hier im Forum.

Ich bin begeisterter Nutzer des Skripts "SpracheGruppenKopie_506d.js" von Hans Haesler.
http://www.fachhefte.ch/...&downloadIDX=160

Es arbeitet gut und (fast) zuverlässig.
Fast, weil es manchmal nicht starten will, da irgendein Parameter es vorher zum Abbruch zwingt (ohne Meldung).
Kann es sein, dass es die [Root] der Absatzformate nicht findet?

EDIT: wenn pSel an den Anfang des Skripts gestellt wird und der Wert gleich 0 ist, dann läuft das Skript stabil und ohne Abbruch.

Das ist aber nicht mein eigentliches Problem.
Da das Skript Ebenen kopiert und auch umbenennt, dachte ich mir das ist bei Absatzformaten ebenso.
Das ist aber bei Absatzformaten nicht so.
In den Formaten wird einen neue, passend benannte Gruppe angelegt, in der zwar die Absatzformate mit den neuen Sprachzuweisungen vorhanden sind, aber der Formatname ist gleich dem Ausgangsformat.

Also nichts leichter als das, dachte ich - und beging mich auf die Suche nach einem Umbenennungsskript.
Ich habe auch mehrere Skripte gefunden, die Absatzformatnamen verändern können, aber keines davon kommt mit einer Formatgruppe zurecht.

Mein kläglicher Versuch dies selbst zu erledigen scheitet an meiner Unfähigkeit.
Es soll nur EINE Formatgruppe angesprochen werden.
ALLE Absatzformate zu ändern, würde auch die Ursprungs-Formatgruppe betreffen.

Mit zwei Skripten habe ich mich näher beschäftigt:
Code
// FormatNamenUmbenennenSprache.jsx 
// Ersetzt in den Formatnamen den String myAltSprach durch myNeuSprach
// z.B. aus "Normal_DEU" wird "Normal_FRA"
//
var myAltSprach = "EN_"
var myNeuSprach = "DE_"

// var myGrp = "Formatgruppe 1"

var myDoc = app.documents[0];
var myStyles = myDoc.paragraphStyles;
// var myPGrp = myDoc.paragraphStyleGroups;


for (k=2;k<myStyles.length;k++){

myDoc.paragraphStyles[k].name = convertName(myDoc.paragraphStyles[k].name);
// myDoc.paragraphStyleGroups.item("Gruppenname").paragraphStyles.item("Absatzname");
// myDoc.paragraphStyleGroups(myGrp).paragraphStyles [k].name = convertName(myDoc.paragraphStyleGroups(myGrp).paragraphStyles[k].name);
// myDoc.paragraphStyleGroups.itemByName(myGrp).paragraphStyles[k].name = convertName(myDoc.paragraphStyleGroups.itemByName(myGrp).paragraphStyles[k].name);

}

function convertName(oneStyle){
var oneStyle = oneStyle.split(myAltSprach);
var oneStyle = oneStyle.join(myNeuSprach);
return oneStyle;
}


und ein selbstgebasteltes ...

Code
// vorsichtshalber die Dialoge einschalten 
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;


// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// eine Referenz zum vordersten Dokument
var curDoc = app.documents[0];

// Stil Variabeln
// Absatzformate
var myPStyles = app.activeDocument.paragraphStyles;
// Zeichenformate
// var myCStyles = app.activeDocument.characterStyles;
// Absatzformat-Gruppe
var myPGrp = app.activeDocument.paragraphStyleGroups;

// Startdialog
var a_dialog = app.dialogs.add({name:"Absatzformat am Anfang umbenennen"});
var min_width_left = 160;
var min_width_right = 250;

main();
function main(){
//
with (a_dialog) {
with (dialogColumns.add()) {
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Alle in der Hauptebene liegenden Formate werden umbenannt !!!", } );
staticTexts.add( {staticLabel: "Die Absatzformate müssen aus der Formatgruppe genommen werden.", } );
}
}
// Auswahl der Gruppe
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Absatzformatgruppe:", minWidth: min_width_left} );
with (dialogColumns.add()) {
// hole alle Stilgruppennamen
var dropchoise_g = curDoc.paragraphStyleGroups.everyItem().name;
// wähle die erste Gruppe aus -> selectedIndex: 0
var drop_grp = dropdowns.add({ stringList: dropchoise_g, selectedIndex: 0, minWidth: min_width_right});
}
}
}
// Auswahl des alten Namensteils
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Auswahl alter Namesteil:", minWidth: min_width_left} );
with (dialogColumns.add() ) {
var dropchoise_o = ["DE_", "EN_", "FR_", "IT_", "CS_", "ES_", "PL_","RU_"];
// wähle die ersten Namen aus -> selectedIndex: 0 -> DE_
var drop_o = dropdowns.add({ stringList: dropchoise_o, selectedIndex: 1, minWidth: min_width_left});
}
}
}
// Auswahl des neuen Namensteils
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Auswahl neuer Namesteil:", minWidth: min_width_left} );
with (dialogColumns.add() ) {
var dropchoise_n = ["DE_", "EN_", "FR_", "IT_", "CS_", "ES_", "PL_","RU_"];
// wähle die zweiten Namen aus -> selectedIndex: 1 -> EN_
var drop_n = dropdowns.add({ stringList: dropchoise_n, selectedIndex: 0, minWidth: min_width_left});
}
}
}
}
}
// Auswahl anzeigen
if (a_dialog.show() == false) {
a_dialog.destroy(); // Dialog erst löschen
} else {
/*a_string = "Gewechselt wird:\r\r";
a_string += "von Sprachtext: " + dropchoise_o [drop_o.selectedIndex] + "\r\r";
a_string += "nach Sprachtext: " + dropchoise_n [drop_n.selectedIndex] + "\r\r";
a_string += "aus Gruppe: " + dropchoise_g [drop_grp.selectedIndex] + "\r";
alert(a_string); */
}
// app.activeDocument.paragraphStyleGroups[0].paragraphStyles -> zeigt auf Stile in der Gruppe.

var styleToChange = dropchoise_o [drop_o.selectedIndex]
var theNewStyle = dropchoise_n [drop_n.selectedIndex]
var theGroup = dropchoise_g [drop_grp.selectedIndex]

alert (theGroup)
alert (styleToChange)
alert (theNewStyle)

cleanUpName(styleToChange, theNewStyle)
}

function cleanUpName(oldChar, newChar) // Namesteil tauschen
{
// Absatzformate
if (myPStyles.length > 2)
for (i = 2; i < myPStyles.length; i++)
myPStyles[i].name = myPStyles[i].name.split(oldChar).join(newChar);

// Zeichenformate
// if (myCStyles.length > 2)
// for (k = 2; k < myCStyles.length; k++)
// myCStyles[k].name = myCStyles[k].name.split(oldChar).join(newChar);
}


Ich krieg's nicht hin ... :_(((

Ein weiteres Problem ergibt sich aus der Ebenenkopie.
Dadurch habe ich jetzt auch doppelte Bildrahmen.
Eigentlich nicht so schwer - einfach Bild anklicken und löschen - aber bei fast 800 Dokumenten mit angelegten Kopien eine langwierige Aufgabe.

Auch will ich per Skript eine Lösung finden.
Gesagt, getan zusammengebaut aus vielen Einzelteilen.
... und natürlich bin ich auch hier erfolgreich gescheitet:
verankerte Bildrahmen werden gelöst, aber auch verankerte Textrahmen - das soll nicht sein.
Auch gesperrte Ebenen stellen ein Problem für dies Skript dar.

Wie kann man hier nur die doppelten Bildrahmen und doppelten verankerten Bildrahmen löschen?

Code
//verschiebt alle Bilder/Grafiken nach "Pictures"; 
//löscht alle Bilder/Grafiken;
// Ebenen werden nicht verändert oder gelöscht - nur hinzugefügt


// Ziel ist Indisign
#target indesign;

var myDoc = app.activeDocument;
// var a = app.activeDocument.allPageItems, t;
var allFrames = app.activeDocument.allPageItems;
//Alle Bilder und Grafiken sammeln
var imgs = myDoc.allGraphics;

// Lösen und kopieren der verankerten Objekte eines Dokuments
var foundObjects = Array();

for(var i = 0; i < allFrames.length; i++){
if(allFrames[i].parent instanceof Character){foundObjects.push(allFrames[i]);}
}

if(foundObjects.length > 0){
//Ebene "Pictures" anlegen
try{var myDestLayer = myDoc.layers.add({name:"Pictures"});}
catch(him){myDestLayer = myDoc.layers.item("Pictures");}
// an oberste Stelle schieben
myDestLayer.move(LocationOptions.BEFORE, myDoc.layers[0]);
for(var i = 0; i < foundObjects.length; i++){
var newDuplicate = foundObjects[i].duplicate(myDestLayer);
newDuplicate.geometricBounds = foundObjects[i].geometricBounds;
// löscht die leeren Textrahmen der ehemaligen verankerten Bildrahmen
try{newDuplicate.graphics[0].geometricBounds = foundObjects[i].graphics[0].geometricBounds;}catch(him){}
}
}
// Alle Grafiken/Bilder bewegen nach "Pictures"
pictureLayer = myDoc.layers.itemByName ("Pictures");
myDoc.rectangles.everyItem().itemLayer = pictureLayer;

// Sichbarkeit ausschalten für "pictures" - nur zur Kontrolle, sonst auskommentiert
myDoc.layers.item('Pictures').visible=false;

// und weiter

//Löscht alle Bilder in Grafikrahmen.
//auch verankerte Objekte im Textfluss oder in Tabellen!
delGra ();
function delGra() {
for (var n=allFrames.length-1; n>=0; n--) {
if (allFrames[n].constructor.name == "Rectangle") {
if (allFrames[n].graphics.length < 1) {
allFrames[n].remove();
}
}
}
}

// Leere Bildrahmen löschen
delRect();
function delRect() {
var theGraphicFrames = app.activeDocument.rectangles;
for (i=theGraphicFrames.length-1; i>=0; i--) {
if (theGraphicFrames[i].graphics.length < 1) {
theGraphicFrames[i].remove();
}
}
}
// alle verankerten Objekte löschen
app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences.findWhat= "^a";
myDoc.changeText();
app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;


Kann mir auch hier jemand behilflich sein?

Ich habe die Skripte weitestgehend mit Kommentaren versehen.
Aber auch Dinge drin, die zum eigentlichen Ablauf nicht gebracht werden (ich experimentiere ja noch).

Vorab ein großes Dankeschön, dass ihr euch die Zeit genommen und dies gelesen habt.

(Dieser Beitrag wurde von Rubberduck am 13. Mär 2016, 16:57 geändert)
X

Absatzformatgruppen

Hans Haesler
  
Beiträge gesamt: 5826

13. Mär 2016, 17:43
Beitrag # 2 von 9
Beitrag ID: #547997
Bewertung:
(3857 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

herzlich willkommen in der Skriptwerkstatt auf HilfDirSelbst! :-)

Dass das genannte Script nicht starten will, habe ich noch nie gehört. Würdest Du mir bitte ein Dokument zustellen, mit welchem das Problem nachvollzogen werden kann?

Das Umbenennen der Formate wurde noch nie verlangt. Aber es könnte in das Script eingebaut werden.

Doch zunächst ist es einfacher, Deinen ersten Versuch zum Laufen zu bringen:

Code
//FormatNamenUmbenennenSprache.js 
//Ersetzt in den Formatnamen den String oldLang durch newLang
//z.B. aus "EN_Test" wird "DE_Test"

var oldLang = "EN_";
var newLang = "DE_";

var curGroup = "DE_Formatgruppe";

var curDoc = app.documents[0];
var curStyles = curDoc.paragraphStyleGroups.itemByName(curGroup).paragraphStyles;
var nStyles = curStyles.length;

for (k=0; k<nStyles; k++) {
oldName = curStyles[k].name;
curDoc.paragraphStyleGroups.itemByName(curGroup).paragraphStyles[k].name = convertName(oldName);
}

function convertName(oneStyle){
var oneStyle = oneStyle.split(oldLang);
var oneStyle = oneStyle.join(newLang);
return oneStyle;
}

Hier funktioniert es wie erwartet.

Gruss, Hans


als Antwort auf: [#547995]

Absatzformatgruppen

Hans Haesler
  
Beiträge gesamt: 5826

13. Mär 2016, 21:28
Beitrag # 3 von 9
Beitrag ID: #547998
Bewertung:
(3789 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

zum Problem der doppelten Bildrahmen.

Das Dokument sollte zu Beginn mit zwei Ebenen angelegt werden:
– Ebene "Text";
– Ebene "Bilder".

Dann braucht es kein Script, um die Bilder zu verschieben.

Wird aber das Dokument mit einer einzigen Ebene geliefert, dann sollte das Bilder-verschieben-Script lanciert werden, bevor die Text-Ebene kopiert wird.

Code
// verschiebt alle Bilder/Grafiken nach "Pictures"; 
// löscht alle Bilder/Grafiken;
// Ebenen werden nicht verändert oder gelöscht - nur hinzugefügt

var curDoc = app.activeDocument;
var allFrames = curDoc.allPageItems;
var nFrames = allFrames.length;

// alle Bilder und Grafiken sammeln
var imgs = curDoc.allGraphics;

// lösen und kopieren der verankerten Objekte eines Dokuments
var foundObjects = new Array();

for (var n=0; n<nFrames; n++) {
if (allFrames[n].parent instanceof Character) {
foundObjects.push(allFrames[n]);
}
}

var nObj = foundObjects.length;
if (nObj > 0) {
// Ebene "Pictures" anlegen
try {
var destLayer = curDoc.layers.add({name:"Pictures"});
}
catch (e) {
destLayer = curDoc.layers.item("Pictures");
}
// an oberste Stelle schieben
destLayer.move(LocationOptions.BEFORE, curDoc.layers[0]);
for (var n=0; n<nObj; n++) {
var newDuplicate = foundObjects[n].duplicate(destLayer);
newDuplicate.geometricBounds = foundObjects[n].geometricBounds;
// löscht die leeren Textrahmen der ehemaligen verankerten Bildrahmen
try {
newDuplicate.graphics[0].geometricBounds = foundObjects[n].graphics[0].geometricBounds;
}
catch (e) {
}
}
}

// alle Grafiken/Bilder bewegen nach "Pictures"
pictureLayer = curDoc.layers.itemByName("Pictures");
curDoc.rectangles.everyItem().itemLayer = pictureLayer;

// Sichbarkeit ausschalten für "Pictures" - nur zur Kontrolle, sonst auskommentiert
//curDoc.layers.item("Pictures").visible=false;

// löscht alle Bilder in Grafikrahmen; auch verankerte Objekte im Textfluss oder in Tabellen!
delGra();
// Leere Bildrahmen löschen
delRect();

// alle verankerten Objekte löschen
app.findTextPreferences = app.changeTextPreferences = null;
app.findTextPreferences.findWhat = "^a";
curDoc.changeText();
app.findTextPreferences = app.changeTextPreferences = null;

function delGra() {
for (var n=nFrames-1; n>=0; n--) {
if (allFrames[n].constructor.name == "Rectangle") {
if (allFrames[n].graphics.length < 1) {
allFrames[n].remove();
}
}
}
}

function delRect() {
var graphFrames = app.activeDocument.rectangles;
var nGraphs = graphFrames.length;
for (n=nGraphs-1; n>=0; n--) {
if (graphFrames[n].graphics.length < 1) {
graphFrames[n].remove();
}
}
}

Unklar ist aber, weshalb verankerte Bilder auf die Ebene "Pictures" kopiert werden. Das macht doch keinen Sinn. Weil der Text die Bilder nicht mehr umfliesst und letztere nicht mehr automatisch verschoben werden.

Und normalerweise liegt die Ebene "Bild" zuunterst. Und nicht zuoberst.

Gruss, Hans


als Antwort auf: [#547995]

Absatzformatgruppen

Rubberduck
Beiträge gesamt: 7

14. Mär 2016, 21:56
Beitrag # 4 von 9
Beitrag ID: #548019
Bewertung:
(3671 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

das Script hat nur dann seine Mucken, wenn es zum dritten oder vierten Mal auf das selbe Dokument angewandt wurde. Ich müsste dir mal eins unserer technischen Datenblätter zusenden, was mit dem Script bearbeitet wurde.
Derzeit nutze ich eine modifizierte Version deines Scripts. Bei dem habe ich die Variable "pSel" ziemlich am Anfang des Scripts gestellt und den Wert "0" zugewiesen. Damit läuft es wieder einwandfrei.
Die Datenblätter blähen sich ziemlich auf und mittlerweile arbeiten wir mit CC2015 - ich hoffe das ist kein Problem. Zur Not würde ich dir das Datenblatt per wetransfer zur Verfügung stellen (ohne verlinkte Bilder und Schriften).

Schick mir bitte eine eMail, wenn du ein Datenblatt zum Testen haben möchtest.


als Antwort auf: [#547997]

Absatzformatgruppen

Hans Haesler
  
Beiträge gesamt: 5826

15. Mär 2016, 07:30
Beitrag # 5 von 9
Beitrag ID: #548023
Bewertung:
(3610 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

meine E-Mail-Adresse findest Du in meinem Profil (Klick auf den Link meines Namens).

Gruss, Hans


als Antwort auf: [#548019]

Absatzformatgruppen

Rubberduck
Beiträge gesamt: 7

16. Mär 2016, 19:24
Beitrag # 6 von 9
Beitrag ID: #548077
Bewertung:
(3490 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

deine umgebaute Version funktioniert hervorragend :-))

Aus der Version und meinem längeren Testskript habe ich mir heute ein lauffähige Version gebastelt.
- Auswahl der Absatzformatgruppe per Dropdown-Menü
- Auswahl des vorhandenen Namensteils - auch per Dropdown-Menü
- Auswahl des neuen Namensteil - ja genau - auch per Dropdown-Menü
- Abbruch ohne Fehler möglich (da die Auswahl vorher gelöscht wird, tritt bei Abbruch der Fehler auf, dass kein passender Wert mehr vorhanden ist)
- Fehlerabfrage und -ausgabe eingefügt
- nach besten Wissen und Gewissen kommentiert

Das Skript darf vorhandene Absatzformate nicht überschreiben, daher muss der Fehler ausgegeben werden.

Falls gewünscht, kann ich das hier zur Verfügung stellen.


Zu deinem Script SpracheGruppenKopie_506d noch mal: kann man die Kopie der Zeichenformate und das Anlegen der neuen Gruppe unterdrücken oder abwählen?
Ein Suchen und Ersetzen des Wortes „char“ ergab 143 Ersetzungen - da trau ich mich (noch) nicht ran.
(Vielleicht reicht ja ein Abwählen per Checkbox - ich bin da noch ziemlich blauäugig).

Wir benutzen keine sprachspezifischen Zeichenformate, daher müssen diese nicht erzeugt werden.
Natürlich verwenden wir solche Dinge wie Hochstellen, Tiefstellen, anderer Zeichensatz für Spezialzeichen, etc. - aber alle ohne spezielle Sprache (sonst wären sie nicht universell).


Zu dem Bildproblem:
durch die Verwendung deines hervorragenden Scripts SpracheGruppenKopie_506d ist im letzten Jahr schon ziemlich viel produziert worden (ca. 950 technische Dokumente mit den verschiedensten Sprachkombinationen).
Diese sind im Hintergrund alle weiß und haben nur im Kopf- und Fussbereich etwas Farbe drin.
Die eine Produktabbildung auf der Titelseite liegt auf der Musterseite dafür.
Daher spielt es kaum eine Rolle, wo die Bildebene in der Palette steht.

Auf den Sprachebenen haben wir allerdings dann das Problem, dass niemand daran gedacht hat die Zeichnungen sprachunabhängig zu machen - das ist erst jetzt angegangen worden.
Damit haben wir dann zu viele Zeichnungen in den Dokumenten.
Einige Workarounds haben wir schon ausprobiert - sind aber alle mühselig.
Bei einigen Sprachen (z. B. RU, FR, PL, HU) haben wir zudem noch ein Lauflängen-Problem im Text.
Das macht dann Tabellenköpfe größer.
Nach Möglichkeit sollen aber die Zeichnungen an der selben Position bleiben (Sprachwechsel).
Zur Kennzeichnung und Beschreibung in den Zeichnungen sind jetzt Kästchen mit Zahlen verwendet worden.
Diese sind im InDesign-Text verankert und sollten nicht gelöst werden.
Denn die Sprachen verursachen ja ein Lauflängen-Problem.

Ich werde mal versuchen, das Anders anzugehen.
Eventuell mit Vergabe des Objektnamens für diese Zeichnungen z. B. Tech_etc. damit könnte ich alle Zeichnungen identifizieren und zusammenfassen und danach überflüssige löschen.

Das muss ich noch mal überdenken.

Sonst muss ich doch in den sauren Apfel beissen und alle von Hand überarbeiten.

Nochmals vielen Dank für die schnelle Hilfe.


als Antwort auf: [#548023]

Absatzformatgruppen

Rubberduck
Beiträge gesamt: 7

16. Mär 2016, 19:43
Beitrag # 7 von 9
Beitrag ID: #548078
Bewertung:
(3487 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans,

etwas ist mir grad eben bei der Untersuchung deines SpracheGruppenKopie_506d-Scripts aufgefallen.
Am Ende des Scripts werden die Anzahl der nicht ausgewechselten Formate ausgegeben - was ich als Fehler in Formatzuweisungen ansehe..
Wie es scheint werden die Sprachen geprüft.
Heißt das dann, dass in der kopierten und neu zugewiesenen Ebene/Sprache die aktuell eingestellte Sprache trotzen verwendet wird?
Zur Erklärung: heute habe ich ein Dokument bearbeitet, dass einige falsch zugewiesene Absatzformate in der zu kopierenden Ebene hatte.
Wenn die Anzahl ein Indiz für rasche vergebene Absatz- oder Zeichenformate ist, dann würde ich bei der Fehlerausgabe einen entsprechenden Text anhängen, damit meine Kolleginnen und Kollegen gleich danach suchen können.


als Antwort auf: [#548023]

Absatzformatgruppen

Rubberduck
Beiträge gesamt: 7

17. Mär 2016, 21:26
Beitrag # 8 von 9
Beitrag ID: #548130
Bewertung:
(3378 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen,

als Letztes noch das fertige Script zur Namensänderung einer Absatzformatgruppe.

Wer es für sich benutzen möchte kann das gern machen.
Die Werte für den Namensteil alt und neu müssen im Script geändert werden - das steht auch im Kommentarkopf.

Viel Spaß und leichteres Arbeiten damit :-))

Da ich keine Datei anhängen kann, hier der gesamte Code:
Code
/* BESCHREIBUNG: 
Dies Script benennt Absatformate in Absatzformatgruppen um.
Die relevanten Namensteile können in den Strings "DE_", "EN_", "CN_", "CT_", "CZ_", "ES_", "FR_", "HU_", "IT_", "NL_", "PL_", "RU_", "SE_", "US_" verändert werden.
Nur der Teil zwischen den "" darf geändert werden.
Bei der Auswahl der Absatzformatgruppen wird immer die erste, gefundene Gruppe angezeigt.
Bestehende Absatzformate in der Gruppe werden nicht überschrieben.
Es wird eine Fehlermeldung ausgegeben.
*/

// vorsichtshalber die Dialoge einschalten
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.interactWithAll;

// prüfen, ob ein Dokument geöffnet ist
if (app.documents.length == 0) {
alert ("Es ist kein Dokument offen.", "Achtung");
exit();
}

// eine Referenz zum vordersten Dokument
var curDoc = app.documents[0];

// Fehlerspeicher anlegen
var myErrors = new Array;

// Startdialog
var a_dialog = app.dialogs.add({name:"Absatzformate umbenennen"});
var min_width_left = 160;
var min_width_right = 250;

//
with (a_dialog) {
with (dialogColumns.add()) {
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Alle Absatzformate der gewählten Gruppe werden umbenannt !", } );
staticTexts.add( {staticLabel: "Bestehende Formate können nicht überschrieben werden !", } );
}
}
// Auswahl der Gruppe
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Absatzformatgruppe:", minWidth: min_width_left} );
with (dialogColumns.add()) {
// hole alle Stilgruppennamen
var drop_g = curDoc.paragraphStyleGroups.everyItem().name;
// wähle die erste Gruppe aus -> selectedIndex: 0
var thedrop_g = dropdowns.add({ stringList: drop_g, selectedIndex: 0, minWidth: min_width_left});
}
}
}
// Auswahl des alten Namensteils
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Auswahl alter Text:", minWidth: min_width_left} );
with (dialogColumns.add() ) {
var drop_o = ["DE_", "EN_", "CN_", "CT_", "CZ_", "ES_", "FR_", "HU_", "IT_", "NL_", "PL_", "RU_", "SE_", "US_"];
// wähle die ersten Namen aus -> selectedIndex: 0 -> DE_
var thedrop_o = dropdowns.add({ stringList: drop_o, selectedIndex: 0, minWidth: min_width_left});
}
}
}
// Auswahl des neuen Namensteils
with (borderPanels.add()) {
with (dialogColumns.add()) {
staticTexts.add( {staticLabel: "Auswahl neuer Text:", minWidth: min_width_left} );
with (dialogColumns.add() ) {
var drop_n = ["DE_", "EN_", "CN_", "CT_", "CZ_", "ES_", "FR_", "HU_", "IT_", "NL_", "PL_", "RU_", "SE_", "US_"];
// wähle die zweiten Namen aus -> selectedIndex: 1 -> EN_
var thedrop_n = dropdowns.add({ stringList: drop_n, selectedIndex: 1, minWidth: min_width_left});
}
}
}
}
}
// Auswahl anzeigen
if (a_dialog.show() == false) {
a_dialog.destroy();
exit()
} else {
// diese Zeilen sind nur Kontrolle
/* a_string = "Gewechselt wird:\r\r";
a_string += "von Sprachtext: " + drop_o [thedrop_o.selectedIndex] + "\r\r";
a_string += "nach Sprachtext: " + drop_n [thedrop_n.selectedIndex] + "\r\r";
a_string += "aus Gruppe: " + drop_g [thedrop_g.selectedIndex] + "\r";
alert(a_string); */
}
// Aufräumen
// Alten und neuen Namesteil einsetzen

var oldLang = drop_o [thedrop_o.selectedIndex]; // alter Namensteil aus Dropdownliste
var newLang = drop_n [thedrop_n.selectedIndex]; // neuer Namesteil aus Dropdownliste

var curGroup = drop_g [thedrop_g.selectedIndex]; // Absatzformatgruppe aus Dropdownliste

var curPStyles = curDoc.paragraphStyleGroups.itemByName(curGroup).paragraphStyles;
var nStyles = curPStyles.length;

for (k=0; k<nStyles; k++) {
oldName = curPStyles[k].name;
try {
curDoc.paragraphStyleGroups.itemByName(curGroup).paragraphStyles[k].name = convertName(oldName);
}
catch(e)
{
myErrors.push(e); // Fehler weitergeben
};
}
// Fehler ausgeben
if (myErrors.length > 0)
alert('Achtung!\r' + myErrors.join('\n'));

// Funktion Absatzformate aufteilen und neu zusammenfügen
function convertName(oneStyle){
var oneStyle = oneStyle.split(oldLang);
var oneStyle = oneStyle.join(newLang);
return oneStyle;
}



als Antwort auf: [#548023]

Absatzformatgruppen

Hans Haesler
  
Beiträge gesamt: 5826

17. Mär 2016, 22:37
Beitrag # 9 von 9
Beitrag ID: #548132
Bewertung:
(3358 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Michael,

besten Dank für die Dateien, welche Du mir privat zugestellt hast.

Gestern hatte ich nicht auf Deine Beiträge im Forum antworten können, weil ich erstens mit zwei anderen Problem beschäftigt war und zweitens die HDS-Ankündigung im Spam-Ordner landete ...

Heute war ich den ganzen Tag abwesend (mit Langlaufskiern in den Bergen :-) und habe erst auf der Heimfahrt Deine Beiträge per iPhone gelesen.

Jetzt bin ich am Abarbeiten was sich so angesammelt hat. Deshalb werde ich wohl erst übers Wochenende auf Deine Fragen eingehen können.

Gruss, Hans


als Antwort auf: [#548130]
X