Seite 1 von 1
dbf-datei in bestehenden frame laden
Verfasst: Fr, 10.02.2006 16:48
von kannenklaus
hallo gruppe,
ich möchte eine dbf-datei in ein gerades geöffnetes calc-dokument einlesen. die bisherige routine hat dazu geführt, dass immer ein neues fenster geöffnet worden ist. nun wandle ich den code für den targetname wie folgt ab:
beispiel 1 gemäß api-->ohne wirkung
Code: Alles auswählen
StarDesktop.loadComponentFromURL(sDatei, "_self", ""(!) , 0, arg())
beispiel 2 gemäß dem buch von thomas-->leider auch ohne wirkung
Code: Alles auswählen
StarDesktop.loadComponentFromURL(sDatei, "_self!", "" , 0, arg())
nur wenn als argument "_blank", bzw. "_default", übergeben wird, wird der dbf-import vorgenommen. leider in einem neuen fenster.
wer weis rat?
grüße klaus
Verfasst: So, 12.02.2006 14:15
von ykcim
Hallo,
ich habe nicht begriffen welchen Zweck "_self" haben soll. In der Referenz steht dahinter ein Ausrufezeichen.
Ich hatte das Thema mal versucht anzugehen bin aber nicht richtig weit gekommen.
Eine konkrete Methode gibt es nicht. Vor allem zu keiner vernünftigen Lösung.
Liegt also bei mir in der ToDo-Liste.
Eine Beschreibung über den Dispatcher gibt es hier :
http://www.oooforum.org/forum/viewtopic ... sheet+file
Die Lösungen gehen aber nur mit Calc-Tabellen. Und die Parameter für andere Datei muss man selber rausbekommen.
mfg
Michael
Verfasst: So, 12.02.2006 15:20
von Stephan
ich habe nicht begriffen welchen Zweck "_self" haben soll.
Du kannst ein Dokument damit in einen bestehenden Frame laden, d.h. das ersetzt das zur Laufzeit geöffnete Dokument im aktuellen Fenster durch ein anderes Dokument (bei Bedarf erfolgt vorher Speichernachfrage) ohne ein neues Fenster zu öffnen.
Im Speziellen ist es meiner Erinnerung nach auch so das wenn das neue Dokument ein leeres Dokument ist, dieses auch 'Bestand' hat, wenn das ersetzte Dokument ein gespeichertes war, wenn Du danach normal ein weiteres Dokument öffnest. (ich meine im Gegensatz zu dem Verhalten das ein leeres Dokument durch das zu öffnende ersetzt wird wenn das leere noch keine Änderungen aufweist.)
Beispiel:
Code: Alles auswählen
...
sURL = "private:factory/swriter"
Frame = StarDesktop.CurrentComponent.CurrentController.Frame
Frame.LoadComponentFromUrl(sURL, "_self", 0, noArgs())
'oder:
'Frame.LoadComponentFromUrl(sURL, "", 0, noArgs())
...
ersetzt das Dokument im 'StarDesktop.CurrentComponent.'-Fenster durch ein leeres Writer-Dokument.
In der Referenz steht dahinter ein Ausrufezeichen
da steht:
"_self", ""(!) means frame himself
was meiner Meinung nach nur ausdrücken soll das "" auch geht (s.o.), wahrscheinlich nur deshalb mit Ausrufezeichen weil >>,,<< nicht ginge, andererseits wenn Du den Namen des Frames in einer Variable übergibst diese wohl auch leer sein kann.
Gruß
Stephan
Verfasst: So, 12.02.2006 16:00
von ykcim
Und damit bleibt der Zweck der Funktion immer noch offen

Was nützt einem der Austausch eines Dokumentes?
mfg
Michael
PS
was meiner Meinung nach nur ausdrücken soll das "" .....
Stimmt, so habe ich es noch nicht betrachtet.
Verfasst: So, 12.02.2006 18:23
von Stephan
Und damit bleibt der Zweck der Funktion immer noch offen
Gut, aber mehr weiß ich leider nicht bzw. mir scheint wenn Zweck sowas sein soll wie 'Notwendigkeit zur Benutzung' dann wäre das:
LoadComponentFromUrl
wahrscheinlich auch verzichtbar, denn laden kann ich über
Shell und einzig weiß ich nicht aus dem Hut ob ich
alles was ich bei LoadComponentFromUrl über das Parameterarray mitgebe auch in den Shell-Befehl mit reinkriegen kann.
Auch viele der normalen Basic-Funktionen sind unter der Maxime 'brauche ich sie wirklich' völlig verzichtbar.
Gruß
Stephan
Verfasst: Mo, 13.02.2006 16:14
von kannenklaus
hallo stefan,
hallo michael,
...
sURL = "private:factory/swriter"
Frame = StarDesktop.CurrentComponent.CurrentController.Frame
Frame.LoadComponentFromUrl(sURL, "_self", 0, noArgs())
'oder:
'Frame.LoadComponentFromUrl(sURL, "", 0, noArgs())
...
danke für eure tipps. beide von stefan vorgeschlagenen codezeilen liefern das gewünschte ergebnis
beste grüße
klaus
Verfasst: Mo, 13.02.2006 16:21
von ykcim
Damit liest Du aber nicht die dbf-Datei in eine Calc-Datei ein!
mfg
Michael
Verfasst: Mo, 13.02.2006 16:55
von kannenklaus
hallo michael,
stimmt natürlich. unten der vollständige code zum einlesen der dbf-datei.
Code: Alles auswählen
'*****************************************
'***dbf_Import in Verbindung mit Su/Er
'Erstellt am 3.Januar 2006
'geändert am 10.02.06
Sub ImpDbfInAktivesDokument
Dim vDateiDialog
Dim vDateiZugang
dim i as integer
dim sPfad as string 'Startverezichnis der Dialoge
Dim sDatei as String 'nimmt den Pfad und den Dateinamen auf
Dim sFrame as String
vDateiDialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")'Datei Öffnen-Dialog wird erstellt
vDateiZugang = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")'Dateizugang wird erstellt
' sFrame = "lbp_"
'hier wird der Standardpfad festgelegt und in die URL-Schreibweise umgewandelt
sPfad = ConvertToUrl("x:\446\GIS\pfa21\gauss\lbp_mass")
'prüft ob der angegebene Pfad vorhanden ist.
if vDateiZugang.Exists(sPfad) Then
vDateiDialog.SetDisplayDirectory(sPfad)
else
msgbox ("Der gewählte Pfadname existiert nicht!" + Chr(13)+"Die Routine wird beendet.",0+64,"dBase-Import Fehler")
exit sub
End if
'Titel des Öffnen-Dialogs wird festgelegt
vDateiDialog.setTitle("B+P :::dBase-Import:::")
'Öffnen Dialog wird auf dBase gestellt
vDateiDialog.appendfilter("dBase","*.dbf")
'der Variablen i wird der Dateidialog zugewiesen und die if-Abfrage vorbereitet
i = vDateiDialog.Execute()
'der Variablen sDatei wird der kpl. Dateipfad übergeben
If i = 1 then
sDatei = vDateiDialog.Files(0)
end if
vDateiDialog.dispose()
'Hier findet der eigentliche Import statt
'arg (1)=Array mit 2 Argumenten definieren für den Filter und die Filteroptionen
Dim oFrame as Object
Dim arg(1) as new com.sun.star.beans.PropertyValue
arg(0).name = "FilterName"
arg(0).value = "dBase"
arg(1).name = "FilterOptions"
arg(1).value = "0" 'System Character Set Umlaute werden richtig wiedergegeben
oFrame = StarDesktop.CurrentComponent.CurrentController.Frame
'if-Abfrage prüft, ob ein Dateiname übergeben worden ist.
if vDateiZugang.Exists(sDatei) Then
oFrame.loadComponentFromURL(sDatei, "_self", 0, arg())
else
msgbox ("Es wurde keine dbf-Datei ausgewählt!"+ Chr(13)+"Die Routine wird beendet.",0+64,"dBase-Import Fehler")
exit sub
end if
End Sub
Verfasst: Mo, 13.02.2006 20:47
von ykcim
Vielleicht reden wir nicht über das gleiche.
ich möchte eine dbf-datei in ein gerades geöffnetes calc-dokument einlesen....
Deine Funktion importiert die dbase-datei nicht in ein geöffnetes Calc-Dokument.
Das vorhande Dokument wird geschlossen und die dbf-datei im selben Fenster geöffnet.
mfg
Michael