[gelöst] Fehler beim Doc-umspeichern

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
Steppenwolf
*
Beiträge: 19
Registriert: Mi, 03.03.2010 23:15

[gelöst] Fehler beim Doc-umspeichern

Beitrag von Steppenwolf »

Hallo alle miteinander,

ich habe zurzeit wieder mal ein Makro Problem. Das Makro soll ein odt Dokument vervielfältigen. Der erste Schritt, mehrere odt aus der Datei machen und in verschiedene Ordner speichern, funktioniert bei mir tadelos. Beim nächsten Schritt gibt es nun leider Probleme. Es sollen nun nicht nur odt aus dem Dokument gespeichert werden, sondern auch noch doc´s. Ich habe glaubich auch schon genug Code dafür, allerdinsg steckt iwo ein Denkfehler drin und ich brauche jemanden der sich das extern mal eben anguckt. Hier der Code:

Code: Alles auswählen

	REM Init next step "Doc-Speicherung"	
	counter = 0
	testOfStop = oDataArray(counter)(0)
	
	Dim oMediaDescriptor(0) As new com.sun.star.beans.PropertyValue
	oMediaDescriptor(0).Name = "FilterName"
	oMediaDescriptor(0).Value = "MS Word 97"
	
	While (testOfStop <> "Stop")
		rem Der Dummy für die doc Speicherung wird modifizert (Felder löschen kommt noch)
			'Die InvestNummer reinschreiben
		oFeld = Form.getbyName("IT-Investnr")
		oFeld.text = testOfStop
	
		sDateiName = "temp.odt"
		sURL = sourcePath & sDateiName
		sURL = ConvertToURL(sURL)
	
		thisDoc.StoreToURL(sURL, Dummy()) 'speichern	
	
		msgBox "Tempdummy wurde gespeichert"
	
		
		sDateiName = testOfStop & "_" & sErhebung & ".doc"
		sURL = sourcePath & testOfStop & "/" & sDateiName
		sURL = ConvertToURL(sURL)
		
		thisDoc.StoreAsURL( sURL , oMediaDescriptor() )
		
		counter = counter +1
		testOfStop = oDataArray(counter)(0)
		
		'Tempdummy im Hintergrund öffnen
		newpath = ConvertToURL(sourcePath & "temp.odt")
		thisDoc = StarDesktop.loadComponentFromURL(newpath,"_blank",0,myFileProp())
				
	WEND
Dies ist nur ein Teil des Codes, aber es ist der in dem es schief geht. Die Schleife läuft einmal durch, produziert eine vernünftige doc und ein weiterer Schleifendurchlauf wird durch eine IOException message unterbrochen. Der Text der Message ist allerdings "." was mir iwie nicht weiter hilft. Der Fehler tritt beim zweiten Besuch dieser zeile auf:

Code: Alles auswählen

		thisDoc.StoreToURL(sURL, Dummy()) 'speichern	
Kann mir jemand helfen ? Achja es wäre auch cool, wenn ihr mir sagen könntet, ob es der beste Filter ist den ich da zum doc-speichern benutze ^^
Zuletzt geändert von Steppenwolf am So, 09.01.2011 23:21, insgesamt 2-mal geändert.
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
hol.sten
******
Beiträge: 871
Registriert: Fr, 18.11.2005 21:21

Re: Fehler beim Doc-umspeichern

Beitrag von hol.sten »

Steppenwolf hat geschrieben:Hier der Code:

Code: Alles auswählen

...	
		thisDoc.StoreToURL(sURL, Dummy()) 'speichern	
...
		thisDoc.StoreAsURL( sURL , oMediaDescriptor() )
...
Kann mir jemand helfen ?
Warum verwendest du mal StoreToURL und mal StoreAsURL? Das sind unterschiedliche Funktionen:
interface XStorable hat geschrieben:storeAsURL stores the object's persistent data to a URL and makes this URL the new location of the object.
storeToURL stores the object's persistent data to a URL and continues to be a representation of the old URL.

Quelle: http://api.openoffice.org/docs/common/r ... rable.html
Ich würde in deinem Fall immer StoreToURL verwenden, habe aber aufgrund des unvollständigen Beispielcodes nicht ausprobiert, ob das was nützt.

Wenn das Ändern der Speichermethode nix ändern sollte, solltest du dir mal die Dateinamen genauer anschauen, in dem du vor den Aufrufen von StoreToURL, StoreAsURL und loadComponentFromURL jeweils den von dir zusammengeklöppelten Parameter sURL bzw. newpath ausgeben lässt. Vielleicht liegt dort ja ein Problem vor.
Steppenwolf hat geschrieben:Achja es wäre auch cool, wenn ihr mir sagen könntet, ob es der beste Filter ist den ich da zum doc-speichern benutze ^^
Ja, der ist korrekt.
Benutzeravatar
Steppenwolf
*
Beiträge: 19
Registriert: Mi, 03.03.2010 23:15

Re: Fehler beim Doc-umspeichern

Beitrag von Steppenwolf »

Boah Leute ..... ICH LIEBE EUCH ^^

Der Wink mit storeAsURL und storeToRL hat mich erstmal auf den Trichter gebracht, das ich gar keinen TempDummy brauche. Und was dann kam war ja klar. Wenn ich die Zeile mit dem Fehler gar nicht brauche ist der Fehler natürlich schnell gelöst. ^^

Vielen Dank für die schnelle Inspiration. Ich muss wie immer sagen: Dieses Forum ist sehr empfehlenswert ;-)

Achja, bevor ich es vergesse: Das ist nun das funkionierende Code-Schnipsel

Code: Alles auswählen

REM Init next step "Doc-Speicherung"	
	counter = 0
	testOfStop = oDataArray(counter)(0)
	
	Dim oMediaDescriptor(0) As new com.sun.star.beans.PropertyValue
	oMediaDescriptor(0).Name = "FilterName"
	oMediaDescriptor(0).Value = "MS Word 97"
	
	While (testOfStop <> "Stop")
		rem Der Dummy für die doc Speicherung wird modifizert (Felder löschen kommt noch)
			'Die InvestNummer reinschreiben
		oFeld = Form.getbyName("IT-Investnr")
		oFeld.text = testOfStop
	
		sDateiName = testOfStop & "_" & sErhebung & ".doc"
		sURL = sourcePath & testOfStop & "/" & sDateiName
		sURL = ConvertToURL(sURL)
		
		thisDoc.StoreToURL( sURL , oMediaDescriptor() )
		
	rem	dispatcher.executeDispatch(ThisComponent.CurrentController.Frame, ".uno:SaveAs", "", 0, args2())
		counter = counter +1
		testOfStop = oDataArray(counter)(0)
				
	WEND
Ich denke mein Fehler war das LoadComponentfromURL am Ende der Schleife und die ultimative Lösung war auf den Dokumenten-Dummy zu verzichten und in Zukunft nur auf dem Original zu operieren, was mit StoreToURL natürlich überhaupt kein Problem ist ^^
Ich würde ja die Welt verändern,
Doch der Quellcode ist mir zu absurd! ^^
Antworten