Seite 1 von 1

[gelöst] Textfelder einer mit Makro ausgewählter Datei auslesen wie?

Verfasst: Fr 15. Aug 2025, 15:28
von wega
Hallo zusammen,

ich habe eine PDF-Datei eingelesen und diese Übersetzung als Draw-Datei abgelegt.
Nun möchte ich diese Draw-Datei die nach der Übersetzung aus vielen Textrahmen besteht
in eine echte Writer-Datei überführen, indem ich die einzelnen Textrahmen auslese.

Nachdem ich die Draw-Datei per Makro angewählt habe un diese sich auch öffnet, möchte ich
die Inhalte der Textrahmen auslesen.

Hier scheitere ich daran, dass die Anweisung "ThisCompunent" sich auf die Makro-Seite und nicht
wie von mir gewünscht auf das geöffnete Draw-Dokument bezieht.

Wie mache ich das Draw-Dokument per Makro zum "ThisCompunent" ?

Meinen Quellcode lege ich mal bei.

Code: Alles auswählen

Sub Textfelder_auslesen
Dim oFilePicker As Object, oDoc as Object, FileName As String
Dim oQuelldatei as Object, oDrawPage As Object, oShape As Object, oText As Object
Dim i As Integer

FileName = ""

'FilePicker initialization
oFilePicker = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oFilePicker.DisplayDirectory = ConvertToURL("C:\Path\To\SomeDir")
oFilePicker.appendFilter("Draw Documents", "*.odg")
oFilePicker.CurrentFilter = "Draw Documents"
oFilePicker.Title = "Select a Draw document"

'execution and return check (OK?)
If oFilePicker.execute = _
	com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
	FileName = oFilePicker.Files(0)

	'Die Quelldatei öffnen
	oQuelldatei = StarDesktop.loadComponentFromURL(FileName, "_default", 0, Array())
End If

oDoc = ThisComponent ' Aktuelles Dokument
oDrawPage = oDoc.DrawPage ' Zugriff auf die Zeichnungsebene

' Durchlaufe alle Objekte auf der Zeichnungsebene
  For i = 0 To oDrawPage.Count - 1
    oShape = oDrawPage.getByIndex(i)

    ' Prüfe, ob es sich um einen Textrahmen handelt
    If oShape.supportsService("com.sun.star.drawing.TextFrame") Then

      ' Textrahmen gefunden, Eigenschaften auslesen
      Print "Textrahmen gefunden:"
      Print "  X-Position: " & oShape.XPos
      Print "  Y-Position: " & oShape.YPos
      Print "  Breite: " & oShape.Width
      Print "  Höhe: " & oShape.Height

      ' Textinhalt auslesen
      oText = oShape.Text
      Print "  Text: " & oText.String

      ' Optional: Formatierung auslesen
      ' ... (Code zur Formatierungsabfrage) ...
    End If
  Next i
End Sub
mit freundlichem Gruß
Werner

Re: Textfelder einer mit Makro ausgewählter Datei auslesen wie?

Verfasst: Fr 15. Aug 2025, 19:15
von karolus
ja nee …

was wird da wohl für ein Dingsbums im Symbol »oQuelldatei« drinstecken :roll:

Re: Textfelder einer mit Makro ausgewählter Datei auslesen wie?

Verfasst: Fr 15. Aug 2025, 22:06
von wega
Hallo Karolus,

tja, das ist ja mein Problem.
oQuelldatei ist geöffnet und ich kann alle "Form(Textrahmen 'Textinhalt')" sehen.
Jedoch ein Zugriff mit "oDrawPage = oDoc.DrawPage" wird mit einer Fehlermeldung quittiert.

Und genau da hört mein Wissen um "wie geht es sinnvoll weiter" auf.
Wie komme ich an die DrawPage der oQuelldatei?

Gruß Werner

Re: Textfelder einer mit Makro ausgewählter Datei auslesen wie?

Verfasst: Sa 16. Aug 2025, 03:21
von wega
Hallo zusammen,

nach weiterer Suche im Internet bin ich zu folgender Lösung gekommen.

Code: Alles auswählen

'*****************************************
'* Textrahmen auslesen
'*
'*****************************************
'*
Sub Textfelder_auslesen
Dim oFilePicker As Object, oDoc as Object, FileName As String
Dim oQuelldatei as Object, oDrawPage As Object, oShape As Object, oText As Object
Dim i As Integer

FileName = ""

'FilePicker initialization
oFilePicker = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
oFilePicker.DisplayDirectory = ConvertToURL("C:\Path\To\SomeDir")
oFilePicker.appendFilter("Draw Documents", "*.odg")
oFilePicker.CurrentFilter = "Draw Documents"
oFilePicker.Title = "Select a Draw document"

'execution and return check (OK?)
If oFilePicker.execute = _
	com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
	FileName = oFilePicker.Files(0)

	'Die Quelldatei öffnen
	oQuelldatei = StarDesktop.loadComponentFromURL(FileName, "_default", 0, Array())
End If

' Zugriff auf die aktuelle Drawpage
 oDrawPage = oQuelldatei.DrawPages.getByIndex(0)

' Durchlaufe alle Objekte auf der Zeichnungsebene
  For i = 0 To oDrawPage.Count - 1
    oShape = oDrawPage.getByIndex(i)

    ' Prüfe, ob es sich um einen Textrahmen handelt
     If oShape.supportsService("com.sun.star.drawing.TextShape") Then
      ' Textinhalt auslesen
      oText = oShape.Text
      Print "  Text: " & oText.String
    End If
  Next i
  print "nichts gefunden"
  
  ' Dokument schließen
    oQuelldatei.close
End Sub
Damit ist mein Problem vorerst gelöst.

Mit freundlichem Gruß
Werner

Re: Textfelder einer mit Makro ausgewählter Datei auslesen wie?

Verfasst: Sa 16. Aug 2025, 11:30
von karolus
wega hat geschrieben:
Sa 16. Aug 2025, 03:21
nach weiterer Suche im Internet bin ich zu folgender Lösung gekommen.
Wahnsinn… du hast selbstständig herausgefunden, was ich dir bereits vorher mitgeteilt hatte :lol: :lol:

Re: [gelöst] Textfelder einer mit Makro ausgewählter Datei auslesen wie?

Verfasst: Sa 16. Aug 2025, 16:45
von wega
Hallo Karolus,

vielen Dank für Dein engagement,
ein paar verständliche Worte helfen einem Fragenden doch immer weiter.
Danke für Deine ausführliche Anregung.

Mit freundlichem Gruß
Werner