Seite 1 von 1
Abfrage nach geöffneten Dokumenten
Verfasst: So, 03.10.2004 18:38
von Charly
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
Verfasst: So, 03.10.2004 20:15
von Stephan
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
Verfasst: So, 03.10.2004 22:17
von Charly
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
Verfasst: Mo, 04.10.2004 16:23
von Stephan
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
Verfasst: Mo, 04.10.2004 20:43
von Charly
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
Verfasst: Di, 12.10.2004 22:26
von Charly
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
Verfasst: Mi, 13.10.2004 22:10
von Stephan
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