[GastForen Programme Print/Bildbearbeitung Adobe InDesign Abfragen, ob Element eine Tabelle ist

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

Abfragen, ob Element eine Tabelle ist

mike123
Beiträge gesamt: 26

19. Okt 2006, 14:03
Beitrag # 1 von 15
Bewertung:
(4200 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo, hätte da nochmal ne Frage. Ich will jeder Tabelle ein SmartStyle-Object zuweisen. Da ich aber nur jedem PageItem ein SmartStyle zuweisen kann, will ich eine Abfrage einbauen, dass er es nur dann anwendet, wenn es eine Tabelle ist.
Hat da irgendwer ne Lösung?
X

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

19. Okt 2006, 14:25
Beitrag # 2 von 15
Beitrag ID: #257488
Bewertung:
(4197 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

frage nach dem constructor.name (theItem.constructor.name == "Table").

Gegenfrage: ist eine Tabelle denn überhaupt ein pageItem?
Ich fürchte nicht. Tabellen können keine children einer page sein (nicht ungebunden auf einer Seite erscheinen), sondern sind Objekte innerhalb eines Textflusses oder einer Tabellenzelle.

Ich würde die stories abklappern (oneStory.tables).
Eventuell auch noch die cells der tables (falls Tabellen in Zellen enthalten sind).

Wessen children können tables denn sonst noch sein?

Viele Grüße
Martin




als Antwort auf: [#257479]
(Dieser Beitrag wurde von Martin Fischer am 19. Okt 2006, 14:26 geändert)

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

19. Okt 2006, 14:33
Beitrag # 3 von 15
Beitrag ID: #257491
Bewertung:
(4191 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Habe mir den zweiten Teil Deiner Frage nochmal genauer angesehen.

Du kannst einen SmartStyle nicht direkt auf eine Tabelle anwenden, sondern nur auf eine Texrahmen (Textfluß?), in dem eine oder mehrere Tabellen enthalten sind.
Schau mal hier rein: Tabellen automatisch mit SmartStyles formatieren.
Hier findest Du ein Beispielskript und ein paar theoretische Überlegungen ...

Viele Grüße
Martin




als Antwort auf: [#257488]

Abfragen, ob Element eine Tabelle ist

mike123
Beiträge gesamt: 26

19. Okt 2006, 15:01
Beitrag # 4 von 15
Beitrag ID: #257504
Bewertung:
(4178 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mein Problem war, dass ich die Tabelle nicht erst zuerst markieren wollte, sondern, dass alle Tabellen automatisch demObjekt zugwiesen werden. Hab das jetzt so gelöst:

Code
var myDoc = app.activeDocument; 
var myLib = app.libraries.item(0).assets.item(0);
for(i = 0; i < myDoc.pageItems.length; i++) {

if(myDoc.stories.item(i).tables.everyItem().textFrames) {
var myItems = [myDoc.pageItems.item(i)];
myLib.applySmartStyle(myItems);
}
}



als Antwort auf: [#257491]

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

19. Okt 2006, 15:15
Beitrag # 5 von 15
Beitrag ID: #257509
Bewertung:
(4176 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mit allPageItems anstelle von pageItems bekommst Du auch die verschachtelten Textrahmen zu fassen.

Viele Grüße
Martin




als Antwort auf: [#257504]

Abfragen, ob Element eine Tabelle ist

mike123
Beiträge gesamt: 26

25. Okt 2006, 10:27
Beitrag # 6 von 15
Beitrag ID: #258405
Bewertung:
(4126 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich muss jetzt da nochmal nachhaken, weil das so noch nicht ganz funktioniert.
Zitat var myDoc = app.activeDocument;
var myLib = app.libraries.item(0).assets.item(0);
for(i = 0; i < myDoc.pageItems.length; i++) {
if(myDoc.stories.item(i).tables.everyItem().textFrames) {
var myItems = [myDoc.pageItems.item(i)];
myLib.applySmartStyle(myItems);
}
}

Weil ja die stories was anderes sind als die PageItems (was ist da eigentlich der genaue Unterschied?)
Ich will halt abfragen ob ein bestimmtes Element eine Tabelle ist und dann dementsprechend das SmartStyle darauf zuweisen. Irgendwo hab ich glaub ich mal gelesen, dass man die Tabelle in einen Layer stecken muss und dann das SmartStyle dem Layer zuweisen. Kann das ssein. Wüsste sonst nicht, wie ich die Tabelle sonst eindeutig finden kann.


als Antwort auf: [#257509]

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

25. Okt 2006, 11:07
Beitrag # 7 von 15
Beitrag ID: #258416
Bewertung:
(4116 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

> Weil ja die stories was anderes sind als die PageItems (was ist da eigentlich
> der genaue Unterschied?)

PageItems sind, wie der Name fast schon nahelegt, Dinge, die auf einer Seite liegen.
Also Textrahmen, Bildrahmen, Rechtecke, Ovale, Linien ...
Eine Story liegt nicht auf der Seite, sondern schlängelt sich durch die Textrahmen.
Eine Tabellle liegt ebenfalls nie(!) direkt auf einer Seite, sondern ist stets in einer Story eingebunden (und wird in einem PageItem, nämlich dem Textrahmen, angezeigt).

> Ich will halt abfragen ob ein bestimmtes Element eine Tabelle ist
Die Tabellen findest Du über myStory.tables bzw. myStory.tables.everyItem(), nicht aber über myStory.pageItems(). Mit letzterem findest Du lediglich eingebundene Textrahmen, Graphikrahmen, Rechtecke, Ovale, Linien ...
Den Typ der Tabellen kannst Du in einer Schleife mit dem Zähler k mit myStory.tables[k].constructor.name abfragen. ;-)
Den Typ der pageItems einer Story kannst Du über myStory.pageItems[k].constructor.name abfragen. Du wirst hier jedoch nie eine "Table" zu Gesicht bekommen.


Aber das führt in die Irre.
Ich habe schon mehrfach darauf hingewiesen – und auch den Support von WoodWing zitiert:

Zitat von WoodWing It is only possible to apply styles to page items so if you need to apply a styles to a table you will have to apply the style to the page item containing the table. This means that the item in the Smart Styles library will also have to be applied to the page item insead of the table itself.

http://www.hilfdirselbst.ch/..._P227628.html#227628

> Irgendwo hab ich glaub ich mal gelesen, dass man die Tabelle in einen Layer
> stecken muss und dann das SmartStyle dem Layer zuweisen.

Nochmal: Tabellen sind keine PageItems und wenn Du sie auf neun Ebenen legst. ;-)
SmartStyles arbeitet anders als TableStyles und ist nicht ausschließlich ein Instrument zur Formatierung von Tabellen, sondern von PageItems. Und in diesen PageItems (Textrahmen) können Tabellen enthalten sein und die werden alle in einem Rutsch formatiert. Eine individuelle Formatierung einer Tabelle ist nicht möglich. Es sei denn, sie wäre die einzige Tabelle im PageItem (Textrahmen).

Wie sollte man eine Tabelle in einen Layer stecken können?
Du kannst eine Tabelle ausschneiden und in einem neuen Textrahmen auf einem neuen Layer ablegen. Aber eben innerhalb(!) eines Textrahmens. Dem kannst Du ein SmartStyle zuweisen. Nicht dem Layer. Ein Layer ist genausowenig ein PageItem wie die Tabelle.
Aber Du kannst da leicht die Probe auf's Exempel machen: myLib.applySmartStyle(app.activeDocument.layers[0])

Es steht Dir frei, Dir diese Ausführung nochmals vom Support von WoodWing bestätigen zu lassen oder dort mit den Füßen zu stampfen. SmartStyles zeichnet keine einzelnen Tabellen aus, sondern imme alle Tabellen in einem PageItem.

Viele Grüße
Martin




als Antwort auf: [#258405]

Abfragen, ob Element eine Tabelle ist

mike123
Beiträge gesamt: 26

25. Okt 2006, 12:11
Beitrag # 8 von 15
Beitrag ID: #258439
Bewertung:
(4108 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Antwort auf [ Martin Fischer ] Es steht Dir frei, Dir diese Ausführung nochmals vom Support von WoodWing bestätigen zu lassen oder dort mit den Füßen zu stampfen. SmartStyles zeichnet keine einzelnen Tabellen aus, sondern imme alle Tabellen in einem PageItem.


Okay, Deine Erklärungen bringen mich schon weiter.
Aber ich will eh gar nicht einzelne Tabellen in einem PageItem zuweisen, sondern jedes PageItem, in dem eine oder mehrere Tabellen drinnen sind. Also müsste ich nur wissen, in welchem PageItem Tabellen drin sind und die dann zuweisen. Du schreibst doch, dass Stories in einem Textrahmen liegen, und Textrahmen in PageItems. Also müsste ich doch auch auslesen können, ob sich in einem bestimmten PageItem eine Tabelle befindet und diesem PageItem möchte ich dann das SmartStyle zuweisen.
Oder bin ich da komplett auf dem Holzweg und es gibt da gar keine Möglichkeit??


als Antwort auf: [#258416]

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

25. Okt 2006, 12:41
Beitrag # 9 von 15
Beitrag ID: #258450
Bewertung:
(4105 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mike,

> Du schreibst doch, dass Stories in einem Textrahmen liegen,
> und Textrahmen in PageItems.

Textrahmen liegen nicht in PageItems, Textrahmen sind PageItems, so wie Äpfel Obst sind.

> Also müsste ich doch auch auslesen können, ob sich in einem bestimmten PageItem
> eine Tabelle befindet und diesem PageItem möchte ich dann das SmartStyle zuweisen.

Ja, das geht über myTable.parent: parent einer Tabelle ist der Textrahmen.
Und dem kannst Du das SmartStyle zuweisen.

SmartStyles können PageItems zugewiesen werden.
Textrahmen sind PageItems.
Also können SmartStyles (den) Textrahmen zugewiesen werden.
Und (den) Textrahmen können SmartStyles zugewiesen werden. ;-)

Viele Grüße
Martin




als Antwort auf: [#258439]

Abfragen, ob Element eine Tabelle ist

mike123
Beiträge gesamt: 26

25. Okt 2006, 13:59
Beitrag # 10 von 15
Beitrag ID: #258480
Bewertung:
(4092 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja, das geht schon, das habe ich auch schon gelöst. Aber ich will in einer Schleife alle pageItems durchgehen und alle pageItems, in denen eine Tabelle drin ist dann mit dem SmartStyle verknüpfen. Mein Problem ist, dass der Wert "i" in meiner Abfrage natürlich nicht übereinstimmt:
Code
for(i = 0; i < myDoc.pageItems.length; i++) {  
if(myDoc.[b]stories.item([b]i).tables.everyItem().textFrames) {
var myItems = [myDoc.[b]pageItems.item([b]i)];
myLib.applySmartStyle(myItems);
}
}


Ich hoffe, Du hast verstanden, was ich meine.


als Antwort auf: [#258450]
(Dieser Beitrag wurde von mike123 am 25. Okt 2006, 13:59 geändert)

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

25. Okt 2006, 14:08
Beitrag # 11 von 15
Beitrag ID: #258485
Bewertung:
(4087 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Du brauchst nicht auf das pageItem (Obst) zugreifen, sondern kannst gleich auf die textFrames (Äpfel) gehen, weil Du weißt, daß die Tabellen (Apfelfliegen?) nur in Textrahmen, nicht aber in Rechtecken, graphischen Rahmen, Ovalen und Linien enthalten sein können.

Und die Textrahmen kannst Du daraufhin prüfen, ob in hnen Tabellen enthalten sind.

Dein Code könnte in etwa so aussehen (ungetestet):
Code
for (i = 0; i < myDoc.textFrames.length; i++) {   
if(myDoc.textFrames.item(i).tables.length > 0) {
myLib.applySmartStyle(myDoc.textFrames.item(i));
}
}


Viele Grüße
Martin




als Antwort auf: [#258480]

Abfragen, ob Element eine Tabelle ist

mike123
Beiträge gesamt: 26

25. Okt 2006, 14:38
Beitrag # 12 von 15
Beitrag ID: #258491
Bewertung:
(4082 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja es funzt, vielen Dank.
Eigentlich gar ned so schwierig, aber ich seh den Wald vor lauter Bäumen nicht. Man muss halt nur mal die ganzen Elemente von InDesign und dem Scripting checken, dann wird da einiges klarer.
Also vielen dank nochmal, vielleicht kann ich Dir ja auch mal bei irgendwas helfen.


als Antwort auf: [#258485]

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

25. Okt 2006, 15:26
Beitrag # 13 von 15
Beitrag ID: #258502
Bewertung:
(4069 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Prima.

> Man muss halt nur mal die ganzen Elemente von InDesign und dem Scripting checken,
> dann wird da einiges klarer.

Schau Dir mal das Script Dictionary (PDF) von Peter Kahrel an: http://www.kahrel.plus.com/indesignscripts.html

Vom selben Autor gibt es auch eine gute Einführung ins JavaSkripten:
Scripting InDesign with JavaScript

Viele Grüße
Martin




als Antwort auf: [#258491]

Abfragen, ob Element eine Tabelle ist

mike123
Beiträge gesamt: 26

27. Okt 2006, 12:29
Beitrag # 14 von 15
Beitrag ID: #258958
Bewertung:
(4004 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Huhu, ich schon wieder. Ein neues Problem. Ich muss jetzt das ganze nur Abschnittsweise machen. Also nur in dem Abschnitt, in dem ich mich gerade befinde sollen die Tabellen formatiert werden.
Habs so versucht, aber da wird nur die erste Seite verwendet, aber ein page-Objekt scheint es nicht zu geben
Code
var myDoc = app.activeWindow.activePage.appliedSection.startPage;  

var myLib = app.libraries.item("Bibliothek.indl").assets.item("Tabelle-Haupt");

for (i = 0; i < myDoc.textFrames.length; i++) {
if(myDoc.textFrames.item(i).tables.length > 0) {
var myTable = myDoc.textFrames.item(i).tables.everyItem();

myLib.applySmartStyle(myDoc.textFrames.item(i));

}
}


Also ich suche sowas in der Art von: app.activeWindow.activePage.appliedSection.pageItems.item(i)


als Antwort auf: [#258502]

Abfragen, ob Element eine Tabelle ist

Martin Fischer
  
Beiträge gesamt: 12444

27. Okt 2006, 13:49
Beitrag # 15 von 15
Beitrag ID: #258980
Bewertung:
(3994 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ich würde folgendermaßen vorgehen:

1. Auslesen der Startseiten (pageStart) des aktiven und des folgenden Abschnitts;
2. Bestimmung des Seitenumfangs des aktiven Abschnittes (von bis [= eins weniger als die Startseite des nächsten Abschnitts]);
3. die pageItems über ein Range-Objekt der Seiten definieren: app.activeDocuments.pages.itemByRange(myFirstPage, myLastPage).pageItems.

Viele Grüße
Martin




als Antwort auf: [#258958]
(Dieser Beitrag wurde von Martin Fischer am 27. Okt 2006, 13:54 geändert)
X

Aktuell

PDF / Print
kalenderFebruar_kl

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
05.02.2021 - 05.11.2021

Digicomp Academy AG, Limmatstrasse 50, 8005 Zürich
Freitag, 05. Feb. 2021, 13.00 Uhr - Freitag, 05. Nov. 2021, 17.00 Uhr

Lehrgang

Bilden Sie sich zum zertifizierten Publishing-Multimedia-Profi aus. Neben Fotografie und Video befassen Sie sich mit der Medienproduktion, digitalen Publikationen und dem Webdesign für Desktop- und mobile Endgeräte.

Preis: CHF 10'500.-
Dauer: 30 Tage (ca. 210 Lektionen) – Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PM

Veranstaltungen
05.03.2021 - 30.04.2021

Digicomp Academy AG, Zürich oder virtuell
Freitag, 05. März 2021, 13.00 Uhr - Freitag, 30. Apr. 2021, 17.00 Uhr

Lehrgang

Im berufsbegleitenden Web Publisher Lehrgang vertiefen Sie Ihr Wissen rund um das Thema Screendesign und die Umsetzung von Websites. Wir befähigen Sie dazu selbständig und professionell Ihren Webauftritt zu planen und in die Realität umzusetzen.

Preis: CHF 3'250.–
Dauer: 8.5 Tage - Unterricht findet jeweils am Freitag von 13 - 19 Uhr und Samstag von 09 - 17 Uhr statt.

Ja

Organisator: Digicomp Academy AG

Kontaktinformation: Kundenberater-Team, E-Mailkundenberatung AT digicomp DOT ch

digicomp.ch/d/9PWEB