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