Abfrage nach geöffneten Dokumenten

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Abfrage nach geöffneten Dokumenten

von Stephan » Mi, 13.10.2004 22:10

Hallo Charly,

ich habe es nicht ausprobiert, aber ich denke Du hast recht und es funktioniert. In jedem Fall ist mir das hier klar:

'ThisComponent funktioniert hier nicht

Doc = Stardesktop.currentComponent



Gruß
Stephan

von Charly » Di, 12.10.2004 22:26

Hallo Stephan!
Was ich damit sagen will ist das Du ausgehend vom ursprünglichen Code nicht auf die eigentlichen Dokumente zugreifen kannst, ich weiß jedenfalls derzeitig nicht wie ...
Vorausgesetzt die Titelzeile stimmt mit dem Dokumentennamen überein, weiß ich jetzt wie ich auf das gefundene Dokument zugreifen kann. Du hast mich durch eine Antwort in einem andern Thread darauf gebracht.

Code: Alles auswählen

sub Titelleiste_test
for i=0 to Stardesktop.frames.count-1
	title = StarDesktop.frames(i).title 
	if left(title,10) = "charly.sxc" then
		StarDesktop.frames(i).containerwindow.toFront
		Kennung = 1
	end if
next i

If Kennung = 1 then

'ThisComponent funktioniert hier nicht

Doc = Stardesktop.currentComponent  
Blatt = Doc.sheets(0)
Zelle = Blatt.getCellByPosition(0,0)
Zelle.string = "Dokument gefunden"

else msgbox("Datei nicht gefunden")

end if
end sub	

Gruß
Charly

von Charly » Mo, 04.10.2004 20:43

Hallo Stephan!

Danke auch für deinen neuen Code.

Dein erster Code hätte mir allerdings auch sehr gefallen. War so schön übersichtlich. Ich hatte gehofft, man könnte den gefundenen Frame aktivieren und dann mit ThisComponent abfragen. Aber das geht leider nicht. Eigentlich schade.


Gruß
Charly

von Stephan » Mo, 04.10.2004 16:23

Hallo Charly,
Ich weiß nun, dass das Dokument geöffnet ist
Nein, das stimmt eigentlich nicht - ich habe das gestern nicht genau durchdacht. Du weißt nur das es Fenster gibt in deren Titelzeile etwas steht was dort normalerweise stünde wenn Du das entsprechende Dokument "normal" öffnen würdest. Ist jetzt pingelig meinst Du - nein garnicht denn mit:

Code: Alles auswählen

sub Titelleiste_test 
for i=0 to Stardesktop.Frames.count-1 
	stardesktop.Frames(i).title = "irgendetwas"
next i 
end sub
kannst Du in die Titelleisten aller geöffneten Fenster der OOo-Anwendung beliebigen Text eintragen und die geöffneten Dokumente werden davon nicht beeinflußt. Was ich damit sagen will ist das Du ausgehend vom ursprünglichen Code nicht auf die eigentlichen Dokumente zugreifen kannst, ich weiß jedenfalls derzeitig nicht wie ...

Verwende deshalb folgenden Code:

Code: Alles auswählen

sub gesamt
'hier Dateinamen vorgeben
gesuchter_dateiname = "post.sxw"
'----------------------------------------
laenge = Len(gesuchter_dateiname)
alles = StarDesktop.getComponents()
elemente = alles.createEnumeration()
Do While elemente.HasMoreElements
   aktuell = elemente.NextElement()
   If HasUnoInterfaces(aktuell, "com.sun.star.frame.XModel") Then
      If aktuell.hasLocation() Then 
          if Right(ConvertFromURL(aktuell.GetLocation),laenge) = gesuchter_dateiname Then
             if Right(ConvertFromURL(aktuell.GetLocation),3) ="sxc" Then
                'Beispiel Calc
                blatt = aktuell.getSheets().GetByName("Tabelle1")
                zelle = blatt.getCellByPosition(0, 0)
                zelle.Value = 12345
             end if
             if Right(ConvertFromURL(aktuell.GetLocation),3) ="sxw" Then
                'Beispiel Writer
                Cursor = aktuell.Text.createTextCursor()
                Cursor.String = "Das ist ein Beispieltext"
             end if
          end if
      end if
   end if
Loop
end sub

mit diesem Code gibt es das Problem mit dem Titel in den Dokumenteigenschaften nicht mehr und Du greifst exakt auf das gewünschte Dokument zu, völlig unabhängig was in der Titelzeile steht.

Gruß
Stephan

von Charly » So, 03.10.2004 22:17

Hallo Stephan!

Vielen Dank für deine schnelle Antwort.

Leider stehe ich schon wieder auf dem Schlauch. Ich weiß nun, dass das Dokument geöffnet ist, aber wie kann ich es einer Objektvariablen zuweisen, um Zugriff auf das Dokument zu bekommen.

Gruß
Charly

von Stephan » So, 03.10.2004 20:15

Hallo Charly,

Ja, das geht.
Alle geöffneten Fenster der So/OOo-Anwendung zeigen in der Titelzeile entweder:

<Name der Datei> - Staroffice 7 (falls unter Dokumenteigenschaften kein Titel vergeben)

oder

<Dokumenttitel> - Staroffice 7 (falls unter Dokumenteigenschaften Titel vergeben)

(bei OpenOffice steht wahrscheinlich OpenOffice, habe ich nicht geprüft)

Wenn Du entweder den Dateinamen oder falls vergeben den Titel der auf "schon geöffnet ?" zu prüfenden Datei kennst, kannst Du die Titel aller Fenster anzeigen und nachschauen ob das Dokument darunter ist.
Nehmen wir an das Dokument heiße charly.sxw und habe unter Eigenschaften keinen Titel, dann:

Code: Alles auswählen

sub Titelleiste
for i=0 to Stardesktop.Frames.count-1
titel = stardesktop.Frames(i).title
if left(titel,10) = "charly.sxw" Then
	Msgbox "Dokument ist schon geöffnet!"
end if
next i
end sub


Es werden in der Schleife auch Fenster durchlaufen, die keine Dokumentfenster sind (z.B. Basic-IDE) was jedoch für Deine Zwecke nicht stört.
Gruß
Stephan

Abfrage nach geöffneten Dokumenten

von Charly » So, 03.10.2004 18:38

Hallo!

Zum Öffnen eines Writer- oder Calcdokuments per Makro gibt es den Befehl:

Code: Alles auswählen

Dokument = StarDesktop.loadComponentFromUrl(url,"_blank",0,myFileProb())
Gibt es auch eine Möglichkeit vor Aufruf dieses Befehls abzufragen, ob das Dokument nicht bereits geöffnet ist.

Gruß
Charly

Nach oben