hilfdirselbst.ch
Facebook Twitter gamper-media
Forenindex -- Lesezeichen

15 Lesezeichen für skript

Wörterbuch-Problem in CS6
Hallo zusammen,

bzgl. der Wörterbücher in InDesign mache ich entweder etwas falsch oder ich habe bis heute nicht verstanden wie das funktioniert…

Wir haben gerade einen Job abgeschlossen, bestehend aus knapp 500 einzelnen ID-Dateien. Im Laufe des Jobs habe ich immer mal wieder falsche oder unerwünschte Silbentrennungen (meist nicht-deutsche Wörter) ins Benutzerwörterbuch aufgenommen (siehe Screenshot "user_dictionary.pdf").

Selbstverständlich habe ich in den Voreinstellungen für die Dokumente die Option "Benutzerwörterbuch ins Dokument einlesen" aktiviert (siehe Screenshot "dictionary_preferences.pdf).

Etwa drei Wochen lang wurden die Dokumente immer wieder geöffnet und bearbeitet, mal auf Computer A, mal über's Netzwerk auf Computer B. Die Dokumente liegen und lagen stets am gleichen Ort auf Computer A. Ausschließlich auf Computer A wird das auch das Benutzerwörterbuch gepflegt. Es wurde nicht exportiert und auf Computer B übertragen. Nicht ein einziges Mal wurde beim Öffnen eines Dokumentes gemeckert, dass mit den Trennungsausnahmen etwas nicht stimmt. Weder auf Computer A noch auf Computer B.

Seit gestern weist InDesign plötzlich auf Computer A beim Öffnen eines beliebigen Dokumentes dieses Jobs auf abweichende Trennungsausnahmen hin (Screenshot "nervige_frage.pdf"). Ohne dass ich an den Einstellungen von InDesign oder sonstwas etwas verändert hätte. Auf Computer B kommt dieser Hinweis nicht. Gerade mit ca. 20 zufällig ausgewählten Dateien getestet.

Hat jemand eine Erklärung dafür oder kann mir eventuell die "Erleuchtung" geben? Die InDesign-Hilfe macht mich auch nicht schlauer…
...
Ralf Hobirk
15. Nov 2012, 18:00
|| Frage zu #include
Hallo Jürgen,

versuch's mal so:

Code
eval("#include " + Folder.userData + '/Sprachfiles/Sprachdaten.jsx'); 


#include ist keine gewöhnliche Javascript-Funktion sondern eine "Präprozessoranweisung" und kann nicht Variablen oder Ausdrücke als Argument annehmen. Der einzuschließende Dateipfad muss buchstäblich hinter include stehen. Mit eval() kann man das quasi simulieren.

Sauberer wäre es in diesem Fall aber, die Sprachdatei mit app.doScript() auszuführen:

Code
app.doScript(File(Folder.userData + '/Sprachfiles/Sprachdaten.jsx')); 


LG
Martin
...
Martin Braun
6. Dez 2012, 20:19
Zeichen zählen
In http://www.adobeforums.com/webx?14@@.3c063846/5 hat Harbs heute ein erweitertes Skript zum Zählen von Zeichen, Wörtern, Zeilen und Absätzen in der Auswahl, dem ausgewählten Textabschnitt oder in allen Textabschnitten veröffentlicht:

Code
//TextCounter 
//An InDesign 3 JavaScript
//
//Counts text objects in the selection, in the selected story, or in all stories in a document.
//
//For more on InDesign scripting, go to http://www.adobe.com/products/indesign/scripting.html
//or visit the InDesign Scripting User to User forum at http://www.adobeforums.com
//
if(app.documents.length != 0){
if(app.activeDocument.stories.length > 0){
myDisplayDialog();
}
else{
alert("The current document does not contain any text.");
}
}
else{
alert("No documents are open. Please open a document and try again.");
}

function myDisplayDialog(){
var myCountButtons, myRangeButtons;
var myDialog = app.dialogs.add({name:"TextCounter"});
with(myDialog.dialogColumns.add()){ with(borderPanels.add()){
staticTexts.add({staticLabel:"Count:"});
with(myCountButtons = radiobuttonGroups.add()){
radiobuttonControls.add({staticLabel:"Characters"});
radiobuttonControls.add({staticLabel:"Words", checkedState:true});
radiobuttonControls.add({staticLabel:"Lines"});
radiobuttonControls.add({staticLabel:"Paragraphs"});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"Range:"});
with(myRangeButtons = radiobuttonGroups.add()){
radiobuttonControls.add({staticLabel:"Selection", checkedState:true});
radiobuttonControls.add({staticLabel:"Selected Story"});
radiobuttonControls.add({staticLabel:"All Stories"});
}
}
}
var myReturn = myDialog.show();
if (myReturn == true){
//Get the values from the dialog box.
var myRangeType = myRangeButtons.selectedButton;
var myCountType = myCountButtons.selectedButton;
myDialog.destroy();
myTextCounter(myRangeType, myCountType);
}
else{
myDialog.destroy();
}
}
function myTextCounter(myRangeType, myCountType){
var myDocument, myTextCount, mySelection, myCountingUnit;
with (myDocument = app.activeDocument){
//Set the AlreadyCounted key of any stories in the document to false.
for (var myStoryCounter = 0; myStoryCounter < myDocument.stories.length; myStoryCounter ++){
myDocument.stories.item(myStoryCounter).insertLabel("AlreadyCounted", "False")
}
switch (myRangeType){
case 0:
//Count the text in the selection.
//If multiple text frames are selected, all of the
//text in the frames will be counted.
mySelection = selection;
if (mySelection.length == 1){
myTextCount = mySelectionSorter(mySelection[0], myRangeType, myCountType); }
else{
myTextCount = 0;
for (var myCounter = 0; myCounter < mySelection.length; myCounter++){
myTextCount = myTextCount + mySelectionSorter(mySelection[myCounter], myRangeType, myCountType);
}
}
break;
case 1:
//Count the text in the parent story (or stories) of the selection)
mySelection = selection;
if (mySelection.length == 1){
myTextCount = mySelectionSorter(mySelection[0], myRangeType, myCountType);
}
else{
myTextCount = 0;
//Now iterate through the items and count the text.
for (var myCounter = 0; myCounter < mySelection.length; myCounter++){
myTextCount = myTextCount + mySelectionSorter(mySelection[myCounter], myRangeType, myCountType);
}
}
break;
case 2:
//Count the text in all stories of the active document.
myTextCount = 0;
for(var myStoryCounter = 0; myStoryCounter < myDocument.stories.length; myStoryCounter ++){
myTextCount = myTextCount + myCountText(myDocument.stories.item(myStoryCounter), myCountType);
}
break;
}
switch(myCountType){
case 0:
if (myTextCount == 1){
myCountingUnit = "character";
}
else {
myCountingUnit = "characters";
}
break;
case 1:
if (myTextCount == 1){
myCountingUnit = "word";
}
else {
myCountingUnit = "words";
}
break;
case 2:
if (myTextCount == 1){
myCountingUnit = "line";
}
else {
myCountingUnit = "lines";
}
break;
case 3:
if (myTextCount == 1){
myCountingUnit = "paragraph";
}
else {
myCountingUnit = "paragraphs";
}
break;
}
var myDialog = app.dialogs.add({name:"TextCounter", canCancel:false});
with(myDialog){
//Add a dialog column.
with(dialogColumns.add()){
with(borderPanels.add()){
staticTexts.add({staticLabel:"InDesign found "});
with(dialogColumns.add()){
textEditboxes.add({editContents:myTextCount+""});
}
with(dialogColumns.add()){
staticTexts.add({staticLabel:myCountingUnit});
}
}
}
}
myDialog.show();
myDialog.destroy();
}
}
function mySelectionSorter(myObject, myRangeType, myCountType){
var myTextCount;
switch (myObject.constructor.name){
case "Text":
case "InsertionPoint":
switch (myRangeType){
case 0:
myTextCount = myCountText(myObject, myCountType);
break;
case 1:
myTextCount = myCountText(myObject.parentStory, myCountType);
break;
}
break;
case "TextFrame":
switch (myRangeType){
case 0:
myTextCount = myCountText(myObject.texts.item(0), myCountType);
break;
case 1:
//Has the parent story already been counted?
myStory = myObject.parentStory;
myCountedState = myStory.extractLabel("AlreadyCounted");
if (myCountedState != "True"){
myTextCount = myCountText(myStory, myCountType);
myStory.insertLabel("AlreadyCounted", "True");
}
else {
myTextCount = 0;
}
break;
}
break;
default:
//Selection is a not a text object.
//There's still a chance it could be a textPath object.
if (myObject.textPaths.length !=0){
myTextCount = 0;
if (myRangeType == 1){
for (myTextPathCounter = 0; myTextPathCounter < myObject.textPaths.length; myTextPathCounter ++){
myStory = myObject.textPaths.item(myTextPathCounter).parentStory;
myCountedState = myStory.extractLabel("AlreadyCounted");
if (myCountedState != "True"){
myTextCount = myTextCount + myCountText(myObject.textPaths.item(myTextPathCounter).parentStory, myCountType);
myObject.textPaths.item(myTextPathCounter).parentStory.insertLabel("AlreadyCounted","True");
}
else{
myTextCount = 0;
}
}
}
else {
for (myTextPathCounter = 0; myTextPathCounter < myObject.textPaths.length; myTextPathCounter ++){
myTextCount = myTextCount + myCountText(myObject.textPaths.item(myTextPathCounter).texts.item(0), myCountType);
}
}
}
else {
myTextCount = 0;
}
break; }
return myTextCount;
}
function myCountText(myTextObject, myCountType){
var myTextCount;
switch(myCountType){
case 0:
//count characters
myTextCount = myTextObject.characters.length;
break;
case 1:
//count words
myTextCount = myTextObject.words.length;
break;
case 2:
//count lines
myTextCount = myTextObject.lines.length;
break;
case 3:
//count paragraphs
myTextCount = myTextObject.paragraphs.length;
break;
}
return myTextCount;
}

...
Martin Fischer
27. Feb 2008, 23:36
Textrahmen, die ein bestimmtes Absatzformat enthalten, auf andere Ebene kopieren per Skript
Damit?

Code
// Adobe InDesign CS3 Script 

Absatzformat = app.activeDocument.paragraphStyles.item( 'Normal' );
Ebene = app.activeDocument.layers.item( 'Ebene 1' );

app.findTextPreferences = app.changeTextPreferences = NothingEnum.nothing;
try { app.findTextPreferences.appliedParagraphStyle = Absatzformat; } catch(e) { alert( 'Fehler\rAbsatzformat ok?' )}

f = app.activeDocument.findText();
for ( i = 0; i < f.length; i++ )
try { f[i].parentTextFrames[0].itemLayer = Ebene; } catch(e) { alert('Fehler\rEbene ok?\rEventuell steckt der Absatz im Überlauf.' )}


Mist, Du brauchtest es für CS2.
Damit?

Code
// Adobe InDesign CS2 Script 

Absatzformat = app.activeDocument.paragraphStyles.item( 'Normal' );
Ebene = app.activeDocument.layers.item( 'Ebene 1' );

app.findPreferences = app.changePreferences = NothingEnum.nothing;
try { app.findPreferences.appliedParagraphStyle = Absatzformat;} catch(e) {alert('Fehler\rAbsatzformat ok?')}

f = app.activeDocument.search();
for (i = 0; i < f.length; i++)
try {f[i].parentTextFrames[0].itemLayer = Ebene;} catch(e) {alert('Fehler\rEbene ok?\rEventuell steckt der Absatz im Überlauf.')}

...
Martin Fischer
23. Jan 2008, 22:52
Druckordner erstellen mit InDesign CS
Mit dem Thema habe ich gerade auch rumgespielt, weil ein Kunde in CS3 ein Problem mit einem CS1-Skript hat, das die im Dokument verwendeten Schriften in einen bestimmten Ordner kopieren soll.

Das folgende kleine Skript hat den Vorteil, daß es auch auf dem Mac läuft.
Allerdings ist es wg. dem Preflight, der nicht zu unterdrücken ist, etwas langsam.
Immerhin lassen sich die Übertragung der verknüpften Graphiken, Preflight-Fehlermeldungen und ein Report verhindern.

Das Skript fragt nach einem Zielordner.
In diesen Zielordner wird die aktuelle Datei verpackt - und nimmt die (kopierberechtigten) Schriften in den Unterordner "Fonts" mit.
Im Zielordner wird die kopierte InDesign-Datei gelöscht und der Fonts-Ordner bekommt den Namen der InDesign-Datei + '.fonts'. Dort liegen die im Dokument verwendeten Fonts.
Also bei einer "haeberle.indd' bleibt ein Ordner "haeberle.fonts" übrig.

Code
//fontsPackage.jsx  
//DESCRIPTION: Kopiert die im Dokument verwendeten Schriften in einen auszuwählenden Ordner

var d = app.activeDocument;
var f = Folder.selectDialog( 'Verzeichnis für die Ablage der Schriften', new Folder() );
if ( f == null ) exit();

if (f.toString() == d.filePath)
{
var f = new Folder (f + '/Fonts');
f.create();
}
d.packageForPrint( f, true, false, false, false, true, false, 'Fonts', false );
File( f + '/' + d.name ).remove();
var fName = d.name.replace( /.indd/g, '.fonts' );
var renF = Folder( f + '/Fonts' ).rename( fName );
if (renF == false) // Fonts-Ordner mit Dateinamen bereits vorhanden
{
var r = confirm ( 'Achtung!\rAlten Fonts-Ordner \"' + fName + '\" löschen?');
if (r == false)
exit();
// Löschen der Fonts im alten Fonts-Ordner
var s = Folder( f + '/' + fName).getFiles();
for ( i = s.length-1; i >= 0; i--)
s[i].remove();
// Löschen des alten Fonts-Ordners
Folder( f + '/' + fName).remove();
var renF = Folder( f + '/Fonts' ).rename( fName );
}

Vielleicht kann's die eine oder der andere mal brauchen.
...
Martin Fischer
1. Feb 2008, 21:41
Indesign Farbeinstellungen vorgeben
Das auskommentieren ist absicht gewesen. habs mal hier im Forum auskommentiert - nicht das irgendwas komische passiert.

ich hab jetzt mal dran weitergebastelt aber er aktiviertmir nicht das "TIP Zeitung" - es bleibt immer "Benutzerdefiniert" bei Farbprofil stehen!

Hier das momentane Script:

// Farbmanagement - Einstellungen (c) alex rath

with (app.colorSettings)
{

enableColorManagement = true;
//cmsSettingsPath = "W:\Allgem\Color\Settings";
//cmsSettingsPath = "C:\Dokumente und Einstellungen\tipdvs\anwendungsdaten\Adobe\Color\Settings";
cmsSettings = "TIP Zeitung";
rgbPolicy = ColorSettingsPolicy.convertToWorkingSpace;
cmykPolicy = ColorSettingsPolicy.preserveEmbeddedProfiles;
workingSpaceRGB = "Adobe RGB (1998)";
workingSpaceCMYK = "ISOnewspaper26v4";

alert("Voreinstellungen LAYOUT eingerichtet!");
}


Danke für die hilfe....

alex
...
alex77
15. Jan 2008, 10:03
Scripting Hilfe? - Smartes Ankerpunkt wählen
Hallo Scripter,

Ich bin faul, und darum möcht ich den Ankerpunkt per Tastaturkürzel wählen können. Darum habe ich mir 9 Scripts gemacht die jeweils aus einer dieser Zeilen bestehen.
Die Zeile habe ich mir übrigens aus dem Forum gefischt. (Singelmann sei wiedermal dank - muss mir mal sein Buch kaufen) ;)

Code
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_RIGHT_ANCHOR; 
app.layoutWindows[0].transformReferencePoint = AnchorPoint.RIGHT_CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.BOTTOM_RIGHT_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.BOTTOM_LEFT_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_LEFT_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.LEFT_CENTER_ANCHOR;
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_RIGHT_ANCHOR;


Die 9 Skripte habe ich mir auf 9 Tasten gelegt und nun kann ich bequem den Ankerpunkt ändern.

Nun gibt es aber ein zwar logisches aber unbequemes Verhalten beim Ankerpunkt wechseln. Unzwar wenn der gerade angewählte Gegenstand ein horizontal oder vertikal gespiegelter Gegenstand ist. Wenn er -100% bei der Skalierung hat, oder 180 gedreht ist, oder beides. Dann wählt das Skript den zwar für das Objekt korrekten Anker, aber im Kopf erwartet man beim Tastendruck "Anker oben links" auch "oben links" und will nicht erst umdenken wie das Objekt gespiegelt ist. Smart ist das Skript, das einem das denken erspart. :)

Als Lösung könnte das Script vielleicht kurz die Auswahl aufheben, den Ankerpunkt wechseln und wieder das zuvor gehabte Objekt zurückanwählen?

Als andere Lösung stelle ich mir ein WENN/DANN Weiche vor. Zum beispiel für OBEN-LINKS:

IF (VERT_SKALIERUNG > 0%) dann wähle TOP_LEFT_ANCHOR;
IF (VERT_SKALIERUNG < 0%) dann wähle TOP_RIGHT_ANCHOR;
IF (VERT_SKALIERUNG < 0%) UND (ROTATION = 180) dann wähle BOTTOM_RIGHT

Schlimm kompliziert wird es für mich als Nichtmathematiker, wenn man das Skript perfekt haben will. Denn es müste für Rotationsbereiche und für Skalierungsbereiche anders reagieren - sich bei 45° und 225° rotation anders verhalten.

Mag mir jemand helfen? Das resultierende Script wäre doch sehr praktisch. Gibt's des schon? Ich hab schon gesucht.
...
Stephan_M
23. Jan 2008, 18:56
vertikale Hilfslinien entfernen
Tut's das Script?


Code
allGuides = app.documents[0].guides; 
for (n = allGuides.length-1; n>=0; n--) {
if (allGuides[n].orientation == HorizontalOrVertical.VERTICAL) {
allGuides[n].remove();
}
}


(Martin kann das bestimmt auch in einer Zeile ;) )
...
Gerald Singelmann
18. Jan 2008, 09:41
Alle offenen Dateien speichern... Skript?
Hallo Gerald,

Um alle offenen Dokumente mit "sichern unter" zu sichern und dabei durch Löschen der History ihre Dateigröße zu verringern, verwende ich folgendes Skript. Wink

Code
// saveOpenDocs.jsx 
//DESCRIPTION: Sichert alle geöffneten Dokumente und reduziert ihre Dateigröße

var myDocs = app.documents;
var unsavedDocs = 0;
for (oneDoc = 0; oneDoc < myDocs.length; oneDoc++)
(myDocs[oneDoc].saved == true)
? myDocs[oneDoc].save(myDocs[oneDoc].fullName)
: unsavedDocs++;

if (unsavedDocs > 0)
alert (unsavedDocs + " Dokument(e) nicht gesichert!")


Es sichert nur die Dokumente, die bereits einmal gesichert worden sind (also ihre pysikalische Heimat auf dem Datenträger gefunden haben).
...
Martin Fischer
11. Jan 2008, 15:50
Bestimmte Schrift in Pfade umwandeln
Chris,

das sollte damit gehen:
Code
// appliedCStoOutline.jsx 

app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;
app.findTextPreferences.appliedCharacterStyle = "Bold"; // hier Zeichenformat angeben
var myResult = app.activeDocument.findText();
for (i = myResult.length-1; i >= 0; i--)
myResult[i].createOutlines();

...
Martin Fischer
28. Nov 2007, 15:34
Gruppen im gesamten Dokument auflösen
Hallo Michael,

dann versuche es doch mit diesem JavaScript:
Code
while (app.documents[0].groups.length !=0) { 
app.documents[0].groups.everyItem().ungroup();
}
alert ("Fertig.", "Schon gemacht");

Damit werden auch gruppierte Gruppen von Gruppen aufgelöst.

Gruss, Hans...
Hans Haesler
28. Nov 2007, 14:18
versionierung von dateien OHNE version cue?
Das Eventskript saveCopy.jsx für InDesign CS3 erstellt vor dem Sichern der aktuellen Datei automatisch eine Kopie der ursprünglichen Version in einem Unterordner namens "Sicherung", welcher bei Bedarf vom Skript angelegt wird.
...
Martin Fischer
9. Nov 2007, 18:34
Eventskript "neue Ebenen"
Hallo Stefan,

> Fehlerzeichenfolge: Es existiert bereits eine Ebene dieses Namens.

Ist dem so?
Existiert bei Dir eine Ebene mit Namen "Text"?

Auf die fehlende geschweifte Klammer am Ende hat Quarz bereits hingewiesen.

Eine Ebene (hier die Ebene 'Text') kannst Du mit folgendem Befehl ganz nach oben verschieben:
app.activeDocument.layers.item( 'Text' ).move( LocationOptions.atBeginning );

Das Gegenteil (ganz nach unten) wäre:
app.activeDocument.layers.item( 'Text' ).move( LocationOptions.atEnd );

Übrigens sieht meine eigene Version jetzt so aus:
Code
//addLayer.jsx 
#targetengine "myEngine"

var myEventListener = app.addEventListener( "afterNew", addLayer, false );

function addLayer( myEvent )
{
myDoc = myEvent.parent;
myDoc.layers[0].name = 'Text'
myDoc.layers.add( {name: 'Grafik', layerColor: UIColors.red} );
myDoc.layers.add( {name: 'Notes', layerColor: UIColors.gray} );
// ... weitere Ebenen hinzufügen

// die unterste Ebene aktivieren
myDoc.activeLayer = myDoc.layers[-1]; // oder ... = myDoc.layers.item( 'Text' );
}


D.h. ich lösche die vorhandene Ebene nicht, sondern benenne sie einfach um.
Das Löschen würde Probleme bereiten, wenn ein neues Dokument mit der Option "Mustertextrahmen" angelegt würde. Denn dort würden die Mustertextrahmen auf die Ebene gelegt, die gleich danach gelöscht wird.

Am Ende wird die unterste Ebene aktiviert.
...
Martin Fischer
12. Nov 2007, 10:37
||| Scripte unter ID CS3
Hallo,

ich habe mir die deutsche DemoVersion von ID CS3 auf meinen Rechner installiert.

Die Scripte von ID CS2 laufen auch unter ID CS3.
Dazu muß nur, nach Information von Gerald, ein neuer Ordner angelegt werden:

\Dokumente und Einstellungen\Name\Anwendungsdaten\Adobe\InDesign\Version 5.0\Scripts\Scripts Panel\
Version 4.0 Scripts

und dorthin dann die alten Scripte kopieren.

Leider stürzt mir ID CS3 bei Änderung und Hinzufügen nach ca. 30 Tastaturkürzeln ab.
Ich hoffe, dass das später bei der regulären Version nicht mehr passiert.

Gruß
Quarz
...
Quarz
15. Mai 2007, 14:15
lebende Kolumnentitel
Hallo Uli,

hier eine auf die Schnelle überarbeitete Version meines quick & dirty-Skripts zur Plazierung des rechten Kolumnentitels.

Voraussetzung
1. auf der/den Musterseite wird ein Textrahmen für die Kolumnentitel eingerichtet (Formatierung);
2. dieser Textrahmen bekommt die Skriptbezeichnung "HeaderR" (bei Bedarf im Skript die Bezeichnung ändern);
3. vor dem Start des Skripts muß sich der Cursor im Textfluß, in dem nach dem Absatzformat für die Quelle gesucht werden soll, befinden (oder ein Textrahmen ausgewählt sein).

Was macht das Skript
1. Das Skript fragt in einem Dialog nach einem Absatzformat für die Quelle (der Inhalt welcher Überschrift soll in den Kolumnentitel übernommen werden?)
2. das Skript sucht im ausgewählten Textfluß Textrahmen für Textrahmen nach dem Absatzformat.
3. es prüft, ob auf der aktuellen seite ein Textrahmen mit der Bezeichnung "HeaderR" gelöst ist.
a. wenn nein (Skript läuft zum ersten mal durch), dann sucht es bei den Musterseitenobjekten nach einem Textrahmen mit der Bezeichnung "HeaderR", löst diesen und ersetzt den Inhalt durch den Inhalt der Überschrift.
b. wenn ja (Skript ist schon einmal durchgelaufen), dann ersetzt es den Inhalt durch den Inhalt der Überschrift.

Bei mir ist das Skript zwei Skripte: eins für den ersten Durchlauf und eins für weitere Durchläufe.
Das vorliegende Skript erledigt beides, ist deswegen aber etwas langsamer. Vielleicht finde ich noch einen Weg, das Ganze zu beschleunigen.

Probiers mal aus:
Code
// HeaderR_mit_Loesen.jsx 
//

Object.prototype.isText = function()
{
switch(this.constructor.name)
{
case "InsertionPoint":
case "Character":
case "Word":
case "TextStyleRange":
case "Line":
case "Paragraph":
case "TextColumn":
case "Text":
case "TextFrame":
return true;
default :
return false;
}
}

if ((app.selection.length > 0) && (app.selection[0].isText()))
{
var myLabel = "HeaderR";
var myDoc = app.documents[0];
var myStory = app.selection[0].parentStory;

// Grundeinrichtung Inhalt rechter Kolumnentitel = 2. Absatz im Textfluß
var myKolText = myStory.paragraphs[1].contents;

var myKolParaName = myDisplayDialog();
var myKolPara = myDoc.paragraphStyles.item(myKolParaName);

for (oneFrame = 0; oneFrame < myStory.textFrames.length; oneFrame++){
for (onePara = 0; onePara < myStory.textFrames[oneFrame].paragraphs.length; onePara++){
if (myStory.textFrames[oneFrame].paragraphs[onePara].appliedParagraphStyle == myKolPara){
var myKolText = myStory.textFrames[oneFrame].paragraphs[onePara].contents;
}
}
var myPage = myStory.textFrames[oneFrame].parent.documentOffset -1
var myHeaderFrameFound = false;
for (oneF = 0; oneF < myDoc.pages[myPage].textFrames.length; oneF ++){
if (myDoc.pages[myPage].textFrames[oneF].label == myLabel){
myDoc.pages[myPage].textFrames[oneF].contents = myKolText;
myHeaderFrameFound = true;
}
}
if (myHeaderFrameFound == false)
{
var myObjects=myDoc.pages[myPage].masterPageItems;
for (oneObj=0; oneObj<myObjects.length; oneObj++)
{
if (myObjects[oneObj].label==myLabel)
{
myFrame = myObjects[oneObj].override(myDoc.pages[myPage]);
myFrame.contents = myKolText
}
}
}
}
alert("Ready!")
}
else
{
alert("Fehler!\rBitte Textrahmen auswählen oder Cursor in Text plazieren.")
}


function myDisplayDialog(){
var myFieldWidth = 80;

myParaStyles = myDoc.paragraphStyles.everyItem().name;
myParaStyles.splice(0,2);

var myDialog = app.dialogs.add({name:"Kolumnentitel"});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Quellformat:", minWidth:myFieldWidth});
}
with(dialogColumns.add()){
var mySourceDropdown = dropdowns.add({stringList:myParaStyles, selectedIndex:0});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
var theParaStyle =myParaStyles[mySourceDropdown.selectedIndex];
myDialog.destroy();
}
else{
myDialog.destroy();
}
return theParaStyle;
}

...
Martin Fischer
11. Apr 2006, 14:09