Seite 1 von 2

Wie HIDDEN-Datei speichern?

Verfasst: Sa, 19.03.2011 23:30
von balu
N'abend Liebe Gemeinde.

Falls die Lösung zu meinem folgendem Problem hier irgendwo steht, bitte den Link posten. Ich habe irgendwie Tomaten auf den Augen, weil ich nichts finde. :?

In Datei 1 führe ich ein Makro aus, welches im Hintergrund eine andere Datei lädt und bearbeitet.
Code-Schnipp mit HIDDEN laden.

Code: Alles auswählen

	dim dummy()	
	dim myFileProp(0) as New com.sun.star.beans.PropertyValue
	oDok1 = thisComponent  'das aktuell geöffnete Dokument - aus dem der Code gestartet wird
	mySheet = oDok1.sheets.getByName("Settings")
	uPfad = mysheet.getCellRangeByName("A1")
	uDateiName = mysheet.getCellRangeByName("A2")
	uDateiExt = mysheet.getCellRangeByName("G3")
	uString = uPfad.string
	uString1 = uDateiName.string	
	uString2 = uDateiExt.string
	urlAddy = uString & uString1 & uString2
	url = converttourl(urlAddy)
    myFileProp(0).name="Hidden"
    myFileProp(0).value=True
	oDok2 = starDesktop.loadComponentfromURL(url, "_blank", 0, myFileProp())  'das zweite Dokument
	myDocCtrl2 = oDok2.getCurrentController()
Das funktioniert einwandfrei.

Nur wie muss der Code lauten, damit ich die HIDDEN-Datei speichern kann?
Hiermit gehts nicht.

Code: Alles auswählen

	mySheet = oDok1.sheets.getByName("Settings")
	uPfad = mysheet.getCellRangeByName("A1")
	uDateiName = mysheet.getCellRangeByName("A2")
	uDateiName1 = mysheet.getCellRangeByName("D13")	
	uDateiExt = mysheet.getCellRangeByName("G3")
	uString = uPfad.string
	uString1 = uDateiName.string	
	uString3 = uDateiName1.string	
	uString2 = uDateiExt.string
	urlAddy = uString & uString1 & "_" & uString3 & uString2
	url = converttourl(urlAddy)
	oDok2 = storeasurl(url, dummy())  'das zweite Dokument
Fehlermeldung in der letzten Zitierten Zeile:
BASIC-Laufzeitfehler.
Sub- oder Function-Prozedur nicht definiert.
Hatte es mit storeToUrl und StorAsUrl probiert, immer das gleiche Problem. Auch das weglassen von "_" half nicht.

Wäre schön wenn mir noch mal jemand behilflich sein kann.


Gruß
balu

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 01:12
von Stephan
mutmaßlich ist dummy() nicht, oder nicht richtig, deklariert. Darauf gibt zumindest die Fehlermeldung einen indirekten Hinweis.

Ansonsten dürfte die Überschrift des Threads irreführend sein, da das alles mit Hidden-Dateien nichts zu tun hat.

Gruß
Stephan

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 05:26
von komma4
storeAsURL() ist keine selbstdefinierte Funktion (s. Fehlermeldung).

Vermutlich möchtest Du die Methode der Datei aufrufen :D

http://api.openoffice.org/docs/common/r ... storeAsURL


Die Deklaration eines leeren Arrays zuvor ist nicht nötig.

Code: Alles auswählen

oDok2.storeAsURL( url, Array() )

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 11:06
von balu
Hallo liebe Leute!

Danke für eure Antworten.

Winfried, das wars. Genau das brachte mich ans Ziel. Ich danke dir recht Herzlich :D.


Schönen Sonntag noch.
balu

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 12:09
von Stephan
balu hat geschrieben:Hallo liebe Leute!

Danke für eure Antworten.

Winfried, das wars. Genau das brachte mich ans Ziel. Ich danke dir recht Herzlich :D.


Schönen Sonntag noch.
balu
Dann war also, entgegen meiner Annahme, die fehlende Deklaration von dummy() nicht Schuld? Falls das so war würde mich der komplette Code interessieren.


Gruß
Stephan

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 12:12
von Stephan
storeAsURL() ist keine selbstdefinierte Funktion (s. Fehlermeldung).
Hier wäre ich für eine Erklärung dankbar, denn natürlich ist storeASURL() keine selbstdefinierte funktion, die Fehlermeldung bezieht sich doch aber, irrigerweise, darauf das in dummy() eine Solche vermutet wird, weil dummy, mutmaßlich, nicht deklariert ist.



Gruß
Stephan

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 12:17
von komma4
???
Die Fehlermeldung "Sub- oder Function-Prozedur nicht definiert" ist eindeutig.

Hier wird eine SUB/FUNCTION gefunden,

storeasurl(url, dummy())

die eben nicht definiert ist.

dummy ist als Array von Variant in der ersten Zeile deklariert

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 12:32
von Stephan
???
Die Fehlermeldung "Sub- oder Function-Prozedur nicht definiert" ist eindeutig.
Nach meiner ERfahrung sind solche Fehlermeldungen leider vielfach nicht eindeutig weil falsch, da garnicht selten andere FEhler genannt werden, als die tatsächlich bestehen. Auffällig ist das Ganze besonders bei nicht abgeschlossenen oder falsch verschachtetel SChleifern, nur schließe ich bei OOo in Hinblick solcher FEhlermeldungen inzwischen nichts mehr aus.
Hier wird eine SUB/FUNCTION gefunden,

storeasurl(url, dummy())

die eben nicht definiert ist.
braucht sie doch auch nicht weil sie ohnehin existiert, Du selbst hast darauf verwiesen.

dummy ist als Array von Variant in der ersten Zeile deklariert
Und genau das vermute ich nicht und deswegen habe ich genau das bei Balu zurückgefragt.

WAs ich glaube ist das dummy() nur in der einen Sub deklariert ist, der Geltungsbereich von dummy deswegen nur in der einen Sub ist, und die Deklaration in der zweiten Sub schlicht fehlt und deswegen ein zwingender Parameter nicht übergeben werden kann und deswegen die Fehlermeldung kommt, die ja von der genauen inhaltlichen Aussage irrig ist.


Gruß
Stephan

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 12:46
von balu
Hallo Leute.

Stephan, Du wolltest den Code, okay er kommt gleich. Aber eins noch vorweg.
Sorry, dass es so rüberkam als wenn es zwei Subs wären. Es ist aber nur eine Sub die am Anfang die Datei HIDDEN lädt, dann in dieser was ausführt, und am Ende wird dann die HIDDEN gespeichert.

Code: Alles auswählen

	Sub Kopieren
	dim dummy()	
	Dim myDoc2 as object
	Dim oDoc as object	
	Dim mySheet2 as object
	Dim mySheet as object	
	Dim sheets2 as object
	Dim ocalc2 as object	
	Dim Charts2 As Object
	Dim chart2 As Object
	Dim oSheet2 As Object
	Dim MyText2 as String
	Dim oDok2 as object	
	Dim oDok1 as object
	Dim uString as String	
	Dim uString1 as String	
	Dim uString2 as String	
	Dim uString3 as String
	Dim UrlAddy as String
	dim myFileProp(0) as New com.sun.star.beans.PropertyValue
' ------------------------------------	
	oDok1 = thisComponent  'das aktuell geöffnete Dokument - aus dem der Code gestartet wird
' ------------------------------------
'
' Die Zieldatei laden.
'
	mySheet = oDok1.sheets.getByName("Settings")
	uPfad = mysheet.getCellRangeByName("A1")
	uDateiName = mysheet.getCellRangeByName("A2")
	uDateiExt = mysheet.getCellRangeByName("G3") ' Extension .ods
	uString = uPfad.string
	uString1 = uDateiName.string	
	uString2 = uDateiExt.string
	urlAddy = uString & uString1 & uString2
	url = converttourl(urlAddy)
    myFileProp(0).name="Hidden"
    myFileProp(0).value=True
	oDok2 = starDesktop.loadComponentfromURL(url, "_blank", 0, myFileProp())  'das zweite Dokument
	myDocCtrl2 = oDok2.getCurrentController()		
'
' ------------------------------------
' diverse aktivitäten die von hier, also der 1. Datei, in der Zieldatei ausgeführt werden.
'
' ------------------------------------

   mySheet = oDok1.sheets.getByName("Settings")
   uPfad = mysheet.getCellRangeByName("A1")
   uDateiName = mysheet.getCellRangeByName("A2")
   uDateiName1 = mysheet.getCellRangeByName("D13")   
   uDateiExt = mysheet.getCellRangeByName("G3")  ' Extension .ods
   uString = uPfad.string
   uString1 = uDateiName.string   
   uString3 = uDateiName1.string   
   uString2 = uDateiExt.string
   urlAddy = uString & uString1 & "_" & uString3 & uString2
   url = converttourl(urlAddy)
'   oDok2 = storeasurl(url, dummy())  'das zweite Dokument -- so hatte ich es vorher versucht.
'
	oDok2.storeAsURL( url, Array() ) ' Damit funktioniert es so, wie erhofft.
'
	End sub
Jetzt verständlicher, oder bedarf es einer Beispieldatei?

Gruß
balu

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 12:51
von komma4
Stephan hat geschrieben:braucht sie doch auch nicht weil sie ohnehin existiert, Du selbst hast darauf verwiesen.
Das verstehst Du IMHO falsch.

storeAsURL existiert als Methode des Objekts oDok2, aber nicht als eigenständige Funktion im BASIC-Kontext.

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 13:15
von Stephan
Jetzt verständlicher, oder bedarf es einer Beispieldatei?
Der Code scheint mir eindeutig und klar, trotzdem:
Wenn Du eine Beispieldatei hast, die sowohl das Funktionieren als auch das Nichtfunktionieren demonstriert, wäre das gut, denn ich will verstehen woran das Ganze liegt, im Moment verstehe ich es so wie ich es bereits geschrieben hatte und eigentlich reden wir hier über ganz simple Dinge so das es mich verunsichert hier möglicherweise meinerseits einem Mißverständnis zu erliegen und Falsches anzunehmen.

Mein Problem bleibt, denn wenn komma4 schreibt:
Hier wird eine SUB/FUNCTION gefunden,

storeasurl(url, dummy())

die eben nicht definiert ist.
stimmt das einfach nicht bzw. ich verstehe es sonst nicht.

Die Lösung von komma4 definiert ja eben gerade die Funktion nicht sondern übergibt nur einen brauchbaren Parameter, also kann es doch garnicht an fehlender Deklaration liegen wie behauptet wird.

Meine Meinung ist jedenfalls:

die Fehlermeldung ist irreführend, weil sie eine fehlende Funktiondeklaration bemängelt, aber eigentlich sagen müßte das ein Parameter nicht richtig übergeben wird bzw. inhaltlich fehlt und Letzteres ist bereits der gesamte Fehler.


Anscheinsbeleg:
obwohl der Unterschied zwischen:

Code: Alles auswählen

oDok2 = storeasurl(url, dummy())
und:

Code: Alles auswählen

oDok2.storeAsURL( url, Array() )
eben nicht darin besteht das die Funktion "storeAsURL" im zweiten code irgendwo definiert/deklariert wurde, sondern nur ein Parameter korrekt angegeben wurde, funktioniert es, ergo kann es an fehlender Definition/DEklaration nicht gelegen haben sondern einzig am Parameter.

Statt:

Code: Alles auswählen

oDok2.storeAsURL( url, Array() )
sollte genausogut:

Code: Alles auswählen

Dim dummy()
oDok2 = storeasurl(url, dummy())
funktionieren und mithin sollte es auch funktionieren, wenn dummy() irgendwo deklariert ist, Hauptsache die Deklarition ist zum Zeitpunkt der Verwendung noch gültig, was beispielsweise bei DEinem geposteten Code so ist.

Beispielsweise in der StarBasic-FAQ befindet sich ein entsprechender Code:
http://www.dannenhoefer.de/faqstarbasic ... hern..html

Code: Alles auswählen

Sub Speichern 
dim dummy()   
datei="c:\test2.sxw"   
dateiurl=converttourl(datei)   
odoc=thisComponent   
odoc.storeasurl(dateiurl,dummy())

rem oder
rem    odoc.storetourl(dateiurl,dummy())

End Sub
der inhaltlich so ist wie der Code von dem Du sagst das er bei Dir nicht funktioniert.


Gruß
Stephan

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 13:28
von Stephan
Das verstehst Du IMHO falsch.
mmh
storeAsURL existiert als Methode des Objekts oDok2, aber nicht als eigenständige Funktion im BASIC-Kontext.
ganz genauso sehe ich das auch und trotzdem sagst Du das die Fehlermeldung die Balu bekam darauf zurückgeht das eine Funktion nicht definiert ist, denn Du schriebst:
Hier wird eine SUB/FUNCTION gefunden,

storeasurl(url, dummy())

die eben nicht definiert ist.
gleichzeitig ist die LÖsung die Du vorschlägst aber ganz anders, denn sie definiert keine Funktion sondern übergibt nur einen Parameter korrrekt.

UNd genau das ist das was ich die ganze Zeit sage, denn die FEhlermeldung ist eben nicht "eindeutig" oder richtig sondern die Aussage in der FEhlermeldung ist einfach irreführend und falsch.


Es geht, meiner Meinung nach, von Anfang an nur um einen falsch übergebenen Parameter, genauer gesagt erwartet die Methode ein (PropertyValue-)Array und dummy() ist erst dann ein array wenn es so deklariert wurde oder man arbeitet direkt mit Array().
ES ist einfach so das eine Parameterübergabe mit "dummy()" nicht schon wegen der Klammern als Array gewertet wird sondern das Dummy vorher mit Dim dummy() (oder Global ... oder Public...) explizit deklariert werden muß (oder ggf. tatsächlichen Array-iNhalt, durch Zuweisung haben muß, was aber hier nicht der zu betrachtende Fall ist).



Gruß
Stephan

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 13:39
von komma4
Probiere es selbst aus:

Code: Alles auswählen

Sub de47532_richtig

Dim dummy()

oDok = ThisComponent

oDok.storeAsURL( ConvertToURL( "/home/USER/Documents/daten/testdata/de47532_2.odt" ), dummy() )

End Sub
funktioniert genauso, wie

Code: Alles auswählen

Sub de47532_richtig_2

Dim dummy()

oDok = ThisComponent

oDok.storeAsURL( ConvertToURL( "/home/USER/Documents/daten/testdata/de47532_2.odt" ), Array() )

End Sub

Was nicht geht ist das Aufrufen einer Methode eines XStorable-Objekt OHNE die Angabe des Objekts


oDok2 nimmt hier den Rückgabewert der Aktion auf: Variable ist EMPTY

Code: Alles auswählen

Sub de47532_richtig_3

Dim dummy()

oDok = ThisComponent

oDok2 = oDok.storeAsURL( ConvertToURL( "/home/USER/Documents/daten/testdata/de47532_2.odt" ), Array() )
xray oDok2
End Sub

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 13:40
von DPunch
Aloha
Stephan hat geschrieben:gleichzeitig ist die LÖsung die Du vorschlägst aber ganz anders, denn sie definiert keine Funktion sondern übergibt nur einen Parameter korrrekt.
Worauf komma4 hinaus will, ist, dass die Funktion "storeasurl(parameter a, parameter b) "freistehend" schlicht nicht bekannt, weil nicht definiert ist.
Als Methode des Interfaces XStorable hingegen schon.
Der Aufruf

Code: Alles auswählen

oDok2 = storeasurl(url, dummy())
ruft eben *nicht* die durch das Interface XStorable definierte Funktion "storeAsURL" auf, sondern sucht entweder nach einer allgemeinen Basic-Funktion oder einer benutzerdefinierten Funktion mit diesem Namen.
Da stark davon auszugehen ist, dass Balu keine Funktion mit diesem Namen in seinem Code definiert hat, ist auch die Fehlermeldung absolut korrekt.

Re: Wie HIDDEN-Datei speichern?

Verfasst: So, 20.03.2011 13:47
von komma4
oder mit einer eigenen Funktion:

Code: Alles auswählen

Sub de47532_eigeneFkt

print storeAsURL( ConvertToURL( "/home/winni/Documents/daten/testdata/de47532_2.odt" ), Array() )
 
End Sub

Function storeAsURL( url, dummy )

ThisComponent.storeAsURL( ConvertToURL( "/home/winni/Documents/daten/testdata/de47532_2.odt" ), Array() )

storeAsURL = TRUE

End Function
Edit: genau das sag' ich doch die ganze Zeit, DPunch :)