Liste im Writer-Dokument abfragen zu auszugeben?

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

Moderator: Moderatoren

tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Liste im Writer-Dokument abfragen zu auszugeben?

Beitrag von tommy »

Hallo, weiß jemand wie die Liste im Writer-Dokument durch ein Makro abgefragt und deren Inhalte ausgegeben werden können?
Ich bin dankbar für eure Hilfe!

Gruß

Tommy
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Tommy,
....wie die Liste im Writer-Dokument.....
Welche Liste? kannst du das etwas genauer beschreiben?

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Hi Thomas,
Welche Liste? kannst du das etwas genauer beschreiben?
Ich meinte die Nummerierung und die Aufzählungsliste.

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

Beitrag von Stephan »

Listen sind aufeinanderfolgende Absätze mit bestimmter Formatvorlage, ich weiß im Moment nicht ob auch ein direkter Zugriff im Sinne eines "Listenobjektes" möglich ist. Ein Zugriff über die Formatvorlage ist beispielsweise so möglich:

Code: Alles auswählen

Sub Macro1
Dim Doc As Object
Dim Enum As Object
Dim TextElement As Object
Doc = StarDesktop.CurrentComponent
Enum = Doc.Text.createEnumeration
While Enum.hasMoreElements
TextElement = Enum.nextElement
If TextElement.supportsService("com.sun.star.text.Paragraph") Then
'die auszugebenden Listen haben eine bestimmte Formatvorlage
'Hier wird "meinFormat" angenommen 
If TextElement.ParaStyleName = "meinFormat" Then
	ausgabe = ausgabe & TextElement.String & CHR(13)
End If
End If
Wend
msgbox ausgabe
End Sub
Existieren mehrere Listen gibt es zwischen ihnen mindestens einen Absatz anderer Formatierung, was dann zu prüfen und zu berücksichtigen wäre.

Gruß
Stephan
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Hi Stephan,
danke für den Hinweis, ich weiss immer noch nicht, welche Formatvorlage hat die Nummerierung bzw. Aufzählungsliste. Ich habe folgendes ausgeben gelassen TextElement.ParaStyleName, die Ausgabe ist Heading1 und Standard.

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

Beitrag von Stephan »

tommy hat geschrieben:Hi Stephan,
danke für den Hinweis, ich weiss immer noch nicht, welche Formatvorlage hat die Nummerierung bzw. Aufzählungsliste. Ich habe folgendes ausgeben gelassen TextElement.ParaStyleName, die Ausgabe ist Heading1 und Standard.

Gruß
Tommy
Du sollst/mußt der/den Liste(n) eine Absatzformatvorlage (evtl. incl. Nummerierungsvorlage) Deiner Wahl zuweisen und das im Makro entsprechend ändern.
Einerseits werden so die Listen durch das Makro erkannt, andererseits kannst Du damit auch steuern das nur bestimmte Listen ausgegeben werden. Wie Du möglicherweise schon erkannt hast besitzen die vorhandenen Vorlagen "englische" Namen, eigene Vorlagen sollten sich aber direkt über den von Dir vergebenen Namen ansprechen lassen.

Gruß
Stephan
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Hi Stephan,
danke für den Hinweis. Ich denke, es gibt dann Problem, nämlich es funktioniert nicht, wenn der Makro unter engl. OO-Version ausgeführt wird, oder?
Mit folgenden Code habe ich erfahren, dass NumberingStyleName der Nummerierung eine Zahl 332253891 hat und der der Aufzählungsliste eine Zahl 332253892 hat. Mit dieser Zahlen kann man dann abfragen, ob es in Writer-Dokument Liste gibt. Siehst du auch so?

Code: Alles auswählen

goEnum = goThisDoc.Text.createEnumeration
	While goEnum.hasMoreElements()
		goPara = goEnum.nextElement()
		sStyleName = goPara.NumberingStyleName
		if sStyleName<>"" then
			MsgBox sStyleName
		end if
 wend
Gruß
Tommy
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Hallo Tommy,
Ich denke, es gibt dann Problem, nämlich es funktioniert nicht, wenn der Makro unter engl. OO-Version ausgeführt wird, oder?
Hättest Du es ausprobiert wüßtest Du es. Ich habe derzeit keine englische Version zur Hand, sehe aber nicht warum es nicht funktionieren sollte WENN Du zusätzlich zum Code meine Hinweise im letzten Post beachtest.
Mit folgenden Code habe ich erfahren, dass NumberingStyleName der Nummerierung eine Zahl 332253891 hat und der der Aufzählungsliste eine Zahl 332253892 hat.
Die Zahlenwerte kann ich auf einem deutschen OOo nicht nachvollziehen, nehme aber an das sie richtig sind.
Mit dieser Zahlen kann man dann abfragen, ob es in Writer-Dokument Liste gibt. Siehst du auch so?
Ja, im Prinzip schon.

Wenn Du Deine Listen auf die genannte Weise 'hart' formatierst (und nicht mit Formatvorlagen), sollte das ohne Weiteres funktionieren - nur ein allgemeingültiger Weg ist das auch nicht. WAs ich sagen will ist nur das Du so nur speziell formatierte Listen finden kannst und anders formatierte ignoriert werden, was natürlich gar kein Problem ist wenn Du weißt wie die Formatierung ist. Das ist allerdings bei meinem Makro nicht anders.
Der Weg mit goPara.NumberingStyleName ist durchaus interessant, nur ist eben nicht alles was einen 'Nummerierungsstil' zurückgibt zwangsläufig eine Liste. (Überschriften z.B. tragen meist eine Nummerierung und soweit die Formatvorlage der Überschrift eine Nummerierungsvorlage beinhaltet wird sie von Deinem Makro auch gefunden). Solange Du nach einer ganz spezifischen Nummer suchst funktioniert das, aber ebend nur dann. Du mußt vorher wissen wonach Du suchst und eine spezifische Vorlage beim Schreiben zuweisen.

Solltest Du noch eine bessere Methode finden poste sie doch bitte ins Forum.


Gruß
Stephan
tommy
***
Beiträge: 59
Registriert: Fr, 16.04.2004 15:00
Wohnort: Aachen

Beitrag von tommy »

Hi Stephan,
.. Ich habe derzeit keine englische Version zur Hand, sehe aber nicht warum es nicht funktionieren sollte...
Du hast recht.
... (Überschriften z.B. tragen meist eine Nummerierung und soweit die Formatvorlage der Überschrift eine Nummerierungsvorlage beinhaltet wird sie von Deinem Makro auch gefunden)...
Sobald in dem Writer-Dokument Überschriften und Nummerierung vorhanden sind, werden ihr NumberingStyleName gleiche Zahl (324321231) ausgeben. Also habe ich Deinen Vorschlag gefolgt. Ich benutze jetzt selbst definierten Nummerierungsvorlagen. Jetzt kann man herausfinden, ob im Dokument Listen gibt. Die Inhalte der Listen können auch ausgegeben werden.
Danke noch mal für Deine Hinweise!

Gruß

Tommy
Antworten