Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign Skriptwerkstatt » IndexFromCharacterStyle - Formatgruppe

IndexFromCharacterStyle - Formatgruppe

MarioF
Beiträge gesamt: 390

13. Feb 2015, 13:33
Bewertung:

gelesen: 5218

Beitrag als Lesezeichen
Hallo,
ich habe das Script [url=http://hilfdirselbst.org/index1.php?t=Index&read_article=17]IndexFromCharacterStyle angepasst, damit aus Absatzformaten ein Index erstellt wird. Soweit so gut. Nun werden aber keine Absatzformate angezeigt, die in einer Formatgruppe enthalten sind. Wie kann ich es dazu bringen, es doch zu machen?
Code
var myErr = mySucc = 0;     
var myList = "";
var doc = app.activeDocument
var myParagraphStyle = myDisplayDialog(doc);
app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;


app.findTextPreferences.appliedParagraphStyle = myParagraphStyle;
var _index = ( doc.indexes.length == 0 )
? doc.indexes.add()
: doc.indexes.firstItem();
f = doc.findText()
for( oneEntry = f.length-1; oneEntry > -1; oneEntry-- ) {
var _topic = null;
_topic = _index.topics.itemByName( f[oneEntry].contents );
if (_topic == null) {
try {
_topic = _index.topics.add( f[oneEntry].contents );
}
catch(e) {
selectIt(f[oneEntry]);
}
}
try {
_topic.pageReferences.add( f[oneEntry], PageReferenceType.currentPage ) ;
mySucc++;
}
catch(e) {
myList += f[oneEntry].contents + "\r" ;
myErr++;
}
}

alert( "Das Ergebnis:\r" + mySucc + " x erfolgreich\r" + myErr + " x versagt:\r-----------\r" + myList );


function myDisplayDialog(doc){
var myFieldWidth = 120;

var myCharStyles = doc.paragraphStyles.everyItem().name;

var myDialog = app.dialogs.add({name:"Index-Begriffe"});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Absatzformat:", minWidth:myFieldWidth});
}
with(dialogColumns.add()){
var mySourceDropdown = dropdowns.add({stringList:myCharStyles, selectedIndex:myCharStyles.length-1});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
var theCharStyle =myCharStyles[mySourceDropdown.selectedIndex];
myDialog.destroy();
}
else{
myDialog.destroy()
exit();
}
return theCharStyle;
}

function selectIt( theObj )
{
var myZoom = 400;
app.select(theObj,SelectionOptions.replaceWith);
app.activeWindow.zoomPercentage = myZoom;

// Option zum Abbruch, falls innerhalb einer Schleife aufgerufen
var myChoice = confirm ('Fundstelle fehlerhaft!\rWeiter?' );
if (myChoice == false)
exit();
return app.selection[0];
}


Besten Dank für Anregungen.
---
Viele Grüße
Mario

IndexFromCharacterStyle - Formatgruppe

Martin Fischer
  
Beiträge gesamt: 12783

13. Feb 2015, 15:20
Bewertung:

gelesen: 5177

Beitrag als Lesezeichen
Hallo Mario,

verwende allParagraphStyles statt paragraphStyles.

Bedenke, dass allParagraphStyles keine Collection wie paragraphStyles ist, sondern ein Array. Demnach funktionieren everyItem(), firstItem(), item(x) ... nicht.

Das betrifft in erster Linie die Zeile
Code
var myCharStyles = doc.paragraphStyles.everyItem().name; 


Das Array mit den Namen von allParagraphStyles musst Du also in einer Schleife aufbauen.

Viele Grüße
Martin


IndexFromCharacterStyle - Formatgruppe

MarioF
Beiträge gesamt: 390

13. Feb 2015, 17:04
Bewertung:

gelesen: 5125

Beitrag als Lesezeichen
Hallo Martin,
danke für die Antwort. Ich stehe noch etwas auf Kriegsfuss mit Skripting, aber ich werde mich diesbezüglich mal einlesen ;-)
Gruß
---
Viele Grüße
Mario

IndexFromCharacterStyle - Formatgruppe

MarioF
Beiträge gesamt: 390

13. Feb 2015, 18:04
Bewertung:

gelesen: 5087

Beitrag als Lesezeichen
Habe das von dir gefunden http://www.hilfdirselbst.ch/foren/Absatzformatabweichungen_ausgew%E4hlter_Formate_entfernen_P507242.html#507242
Muss mich doch etwas länger damit beschäftigen :-D
---
Viele Grüße
Mario

IndexFromCharacterStyle - Formatgruppe

MarioF
Beiträge gesamt: 390

1. Okt 2015, 22:53
Bewertung:

gelesen: 4543

Beitrag als Lesezeichen
Hallo,
ich muss dieses Thema noch einmal auf machen.
Ich hatte ein Script, welches aus einen gewählten Absatzformat einen Index erstellt. Das hat auch super geklappt. Nun will es nicht mehr das tun, wass ich gern hätte und ich habe keine Ahnung, wo der Fehler ist:
Code
var myErr = mySucc = 0;      
var myList = "";
var doc = app.activeDocument
var myParagraphStyle = myDisplayDialog(doc);
app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;


app.findTextPreferences.appliedParagraphStyle=myParagraphStyle;
var _index = ( doc.indexes.length == 0 )
? doc.indexes.add()
: doc.indexes.firstItem();
f = doc.findText()
for( oneEntry = f.length-1; oneEntry > -1; oneEntry-- ) {
var _topic = null;
_topic = _index.topics.itemByName( f[oneEntry].contents );
if (_topic == null) {
try {
_topic = _index.topics.add( f[oneEntry].contents );
}
catch(e) {
selectIt(f[oneEntry]);
}
}
try {
_topic.pageReferences.add( f[oneEntry], PageReferenceType.currentPage ) ;
mySucc++;
}
catch(e) {
myList += f[oneEntry].contents + "\r" ;
myErr++;
}
}

alert( "Das Ergebnis:\r" + mySucc + " x erfolgreich\r" + myErr + " x versagt:\r-----------\r" + myList );


function myDisplayDialog(doc){
var myFieldWidth = 120;

var myCharStyles = doc.paragraphStyles.everyItem().name;

var myDialog = app.dialogs.add({name:"Index-Begriffe"});
with(myDialog.dialogColumns.add()){
with(dialogRows.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel:"Absatzformat:", minWidth:myFieldWidth});
}
with(dialogColumns.add()){
var mySourceDropdown = dropdowns.add({stringList:myCharStyles, selectedIndex:myCharStyles.length-1});
}
}
}
var myResult = myDialog.show();
if(myResult == true){
var theCharStyle =myCharStyles[mySourceDropdown.selectedIndex];
myDialog.destroy();
}
else{
myDialog.destroy()
exit();
}
return theCharStyle;
}

function selectIt( theObj )
{
var myZoom = 400;
app.select(theObj,SelectionOptions.replaceWith);
app.activeWindow.zoomPercentage = myZoom;

// Option zum Abbruch, falls innerhalb einer Schleife aufgerufen
var myChoice = confirm ('Fundstelle fehlerhaft!\rWeiter?' );
if (myChoice == false)
exit();
return app.selection[0];
}



Es erscheint der Fehler 30477; hier mal die Fehlermeldung: https://dl.dropboxusercontent.com/...%20um%2022.46.48.png

Danke für eure Hilfe!
---
Viele Grüße
Mario

IndexFromCharacterStyle - Formatgruppe

Martin Fischer
  
Beiträge gesamt: 12783

2. Okt 2015, 08:47
Bewertung:

gelesen: 4482

Beitrag als Lesezeichen
Hallo Mario,

was hat sich bei Dir geändert seit es nicht mehr funktioniert?
Die InDesign-Version?

Ersetze versuchsweise die Zeile 63
Code
return theCharStyle; 


durch
Code
if (doc.paragraphStyles.itemByName(theCharStyle).isValid) 
return doc.paragraphStyles.itemByName(theCharStyle);
else
{
alert('Hier stimmt was nicht (' + theCharStyle + ').') ;
exit();
}


Viele Grüße
Martin


IndexFromCharacterStyle - Formatgruppe

MarioF
Beiträge gesamt: 390

2. Okt 2015, 09:46
Bewertung:

gelesen: 4455

Beitrag als Lesezeichen
Hallo Martin,
Antwort auf: was hat sich bei Dir geändert seit es nicht mehr funktioniert?
Die InDesign-Version?

Sorry, hätte ich zuschreiben müssen. Ein Versionssprung von CS6 -> CC 2015 ist erfolgt. Ich habe das Script aber mit der CS 6 getestet, da geht es auch nicht mehr. Was mich sehr wundert, da es bis dato gute Dienste geleistet hat.

Zu dein Änderungsvorschlag kann ich leider noch nix sagen, da ich es gerade nicht testen kann. Ich werde berichten.

Besten Dank schon mal

Mario
---
Viele Grüße
Mario

IndexFromCharacterStyle - Formatgruppe

MarioF
Beiträge gesamt: 390

2. Okt 2015, 22:14
Bewertung:

gelesen: 4369

Beitrag als Lesezeichen
Nochmals besten Dank. Klappt wieder super.
---
Viele Grüße
Mario