Seite 1 von 1

Datei speichern ohne überschreiben. Overwrite

Verfasst: So 3. Okt 2021, 10:01
von elefantino
Hallo. Ich habe eine Datenbank, die über einen Button ein Dokument öffnet, welches Platzhalter enthält, diese wiederrum werden von der Datenbank befüllt. Dank des supertollen Handbuches funktioniert dieses auch einwandfrei. Nach dem öffnen der Datei soll diese unmittelbar abgespeichert werden, dank des beispiels von Andrew Pitonyak/Volker Lenhardt funktioniert auch dieses. Jetzt kommt das Problem: Ich möchte nicht, dass eine evtl. vorhandene Datei ohne nachfragen überschrieben wird leider funktioniert das mit "Overwrite" False nicht. Kann mir jemand sagen, wo ich einen Fehler mache? Ich habe es getestet mit Win7/Libreoffice 6.4 und Win10 /Libreoffice 7.0.

Code: Alles auswählen


	IF oForm.RowCount = 0 THEN
		msgbox "Kein Datensatz zum Drucken vorhanden"
		EXIT SUB
	END IF
REM	Der Zugriff auf die URL ist nicht vom Formular aus direkt möglich. Es muss auf den darüber liegen-
REM	den Frame der Datenbank Bezug genommen werden.
	stDir = Left(oDB.Location,Len(oDB.Location)-Len(oDB.Title))

REM	Der Titel der Datenbank wird von der URL abgetrennt.
	stDir = stDir & "Lettera bozza.odt"

rem	Die Vorlage wird aufgesucht und geöffnet
	DIM args(0) AS NEW com.sun.star.beans.PropertyValue
	args(0).Name = "AsTemplate"
	args(0).Value = true
	oNewDoc = StarDesktop.loadComponentFromURL(stDir,"_blank",0,args)

REM	Die Textfelder werden eingelesen
	oTextfields = oNewDoc.Textfields.createEnumeration
	DO WHILE oTextfields.hasMoreElements
	oTextfield = oTextfields.nextElement  
		IF oTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") THEN
		stColumnname = oTextfield.PlaceHolder

REM	Placeholder ist die Benennung für das Textfeld
			IF oColumns.hasByName(stColumnname) THEN

REM	Wenn der Name des Textfeldes gleich dem Spaltennamen der Daten ist, die dem Formular 
REM	zugrunde liegen, wird der Inhalt aus der Datenbank auf das Feld in dem Textdokument übertragen.
			inIndex = oForm.findColumn(stColumnname)
			oTextfield.Anchor.String = oForm.getString(inIndex)

			END IF
		END IF
	LOOP
	
REM	Datei speichern
	dim document as object
	dim dispatcher as object
	dim surl as string

	Dim arg(1) as New com.sun.star.beans.PropertyValue
	arg(0).Name="FilterName"
	arg(0).Value = "writer8"
	arg(1).Name = "Overwrite"
	arg(1).Value = False
	
	surl = "file:///C:/Dati/_test.odt"
	oNewDoc.storeAsUrl(surl, arg()) 'Speichern



Re: Datei speichern ohne überschreiben. Overwrite

Verfasst: So 3. Okt 2021, 13:31
von F3K Total
Moin,
hänge mal diese Zeilen zum Speichern an dein Makro:

Code: Alles auswählen

	if not fileexists(sUrl) then ' wenn es die Datei noch nicht gibt, wird gespeichert.
	    oNewDoc.storeAsUrl(surl, arg()) 'Speichern
	else 'wenn es die Datei gibt, wird abgefragt, ob sie überspeichert werden soll
	    if msgbox ("Soll die Datei überspeichert werden",36,"Datei existiert") = 6 then
	        oNewDoc.storeAsUrl(surl, arg()) 'Speichern
            endif
	endif
Gruß R

Re: Datei speichern ohne überschreiben. Overwrite

Verfasst: So 3. Okt 2021, 14:39
von elefantino
Vielen Dank F3K Total , das funktioniert prima. Neugierdehalber noch eine Frage: warum funktioniert das nicht mir "Overwrite"?

Re: Datei speichern ohne überschreiben. Overwrite

Verfasst: Mo 4. Okt 2021, 19:06
von F3K Total
elefantino hat geschrieben:
So 3. Okt 2021, 14:39
Neugierdehalber noch eine Frage: warum funktioniert das nicht mir "Overwrite"?
keine Ahnung!