Anzahl der Grafiken ermitteln

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

FReich
Beiträge: 1
Registriert: Mo, 11.10.2004 20:07

Anzahl der Grafiken ermitteln

Beitrag von FReich »

Hi

Ich will ein Abbildungsverzeichnis erstellen. Das klappt inzwischen auch recht gut, nur sollte die Schleife am besten nach der letzten Grafik stoppen, bzw. besser nur durchlaufen, wenn die Anzahl der Grafiken noch nicht erreicht ist, also bei gar keiner eben auch gar nicht :-)

Ich weiß, dass ich mit

Code: Alles auswählen

dim args1(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Type"
args1(0).Value = 6
args1(1).Name = "SubType"
args1(1).Value = 0
args1(2).Name = "Name"
args1(2).Value = ""
args1(3).Name = "Content"
args1(3).Value = ""
args1(4).Name = "Format"
args1(4).Value = 4
args1(5).Name = "Separator"
args1(5).Value = " "
dispatcher.executeDispatch(document, ".uno:InsertField", "", 0, args1())
die Anzahl der Grafiken in den Text einfügen kann, ich denke, es wird aber einen einfacheren Weg geben, die Zahl zu ermitteln, als das jetzt wieder aus dem Text rauszuschnippeln.

Bis jetzt finde ich nur was zum Userprofile, das hilft aber weniger.

THX
Flemming
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Das folgende Makro sollte die Anzahl der Grafiken ermitteln.

Code: Alles auswählen

sub anzahl
oDocument = ThisComponent
anzahl = oDocument.getGraphicObjects()
msgbox anzahl.count
end sub
Der ermittelte Wert entspricht dem Wert der unter Dateieigenschaften/Statistik für Grafiken angezeigt wird.

Gruß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Was den Fehler in meinem Code erzeugt weiß ich nicht, Deine Ausführungen lassen jedoch darauf schließen das die Variable 'aktuell' schon anders definiert ist, wobei ich die Fehlermeldung an sich (in diesem Zusammenhang) nicht verstehe ??

Mein Code sollte die Anzahl der Grafiken liefern welche unter Dateieigenschaften/Statistik aufgeführt wird. Aber ebend diese und nicht so etwas in dem Sinne wie Anzahl der sichtbaren Bilder, weil zumindest bestimmte OLE-Objekte (welche Bilder repräsentieren) wie Bilder aussehen, aber KEINE Grafiken in der hier zugrundeliegenden Terminologie sind...
Die Vorletzte Zeile hatte ich eingefügt, weil mir der Zähler zu weit lief.
Es geht einmal um Anzahl (= Zahl) und einmal um Index (= Zählung beginnend bei 0)

In der Art und Weise wie Du das Einfügen vornimmst kannst Du Dir die Zählung auch sparen, weil das so nicht in Zusammenhang steht. (Deine Annahme aus dem ganz ersten Post ist dem Grunde nach falsch, was ich vergessen hatte zu erwähnen, im Speziellen liefert sie das richtige Ergebnis - jedoch nur weil alle Felder des Nummernkreises bei den Grafiken stehen. Du erhälst also tatsächlich die "Anzahl der beschrifteten Grafiken") Die Gründe:
Die Zählung der Grafiken zählt (wie auch immer) die Grafiken, es ist nicht möglich zu unterscheiden ob eine Grafik eine Beschriftung hat oder nicht, soweit man hierzu das Grafik-Objekt heranzieht. Es gibt keine boolsche Eigenschaft in dem Sinne "hat Beschriftung" (True/False) und auch folglich keine Eigenschaft "Inhalt der Beschriftung". Die Beschriftungen stellen ausschließlich Text in einem Textrahmen dar. Die automatisch erzeugte Nummer (Nummernkreis: Abbildung) ist nur Abhängig von der Position dieses Elements in Dokument und nicht ob es "bei einer Grafik" steht.
Um die Beschriftungen der Grafiken auszulesen mußt Du deshalb auf die entsprechenden Textrahmen zugreifen und deren Textinhalt lesen. Falls es außer den Textrahmen die die Beschriftungen enthalten keine weiteren gibt ist das einfach:

Code: Alles auswählen

Sub getFramesPages 
oDocument = StarDesktop.CurrentFrame.Controller.Model 
oFrames = oDocument.getTextFrames 
for i = 0 to oFrames.Count -1 
   oFrame = oFrames(i) 
   Cursor = oFrame.createTextCursor
   Cursor.gotoEndOfParagraph (False)
   Cursor.gotoStartOfParagraph (true)
   msgbox Cursor.String
next i 
end sub
Gibt es jedoch weitere Rahmen mußt Du ein Entscheidungskriterium finden. Ein hinreichend sicheres Kriterium wäre das die Beschriftung eine Standardfloskel z.B. "Abbildung" an definierter Position enthält. Die sichere Möglichkeit ist es alle Elemente des Rahmens auszuwerten (und somit festzustellen das er tatsächlich Grafik enthält und Möglichkeit der Verifizierung an Hand deren Eigenschaften), es gibt hier einen Beispielcode http://www.oooforum.org/forum/viewtopic ... ht=graphic der bei mir in vorhandener Form nicht läuft, aber das Prinzip erkennen läßt.
Außerdem ist gerade aufgefallen, dass die Reihenfolge der mit Code:
dispatcher.executeDispatch(documentInsertArea, ".uno:InsertField", "", 0, args5()
eingefügten Verweise etwas nicht stimmt.
1,2,3,4,6,7,8,...,52,53,5,54,55,.... Grr. Muss ich jetzt die Daten erst noch sortieren?! Wo ich wieder bei meinem Problem der Datenstrukturen bin

Ich habe nicht intensiv darüber nachgedacht, aber das sollte seine Ursache darin haben das die auf die Grafiken weisenden Referenzen alphabetisch sortiert sind und ihre Reihenfolge nicht in direkten Zusammenhang mit den Index der Grafiken steht - das ist zunächst nur meine Vermutung.

Ich nehme an Du hast, aber trotzdem: Hast Du an die normale Erzeugung eines Abbildungsverzeichnisses gedacht?


Gruß
Stephan
Antworten