Wie kann ich einen Dateipfad ermitteln??

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Wie kann ich einen Dateipfad ermitteln??

Re: Wie kann ich einen Dateipfad ermitteln??

von Stephan » Fr, 10.07.2009 10:39

Wer sich den Code genauer angesehen hat, wird aber wohl eh erkannt haben, dass weder in der alten Eigenschaft "TemplateFileName" noch in der neuen "TemplateURL" der Pfad zur Vorlage steht (Also bei mir sind diese Eigenschaften meisten Strings der Länge Null). Wenn dies der Fall ist werden die Args()-in der Function "getLoadedUrl"- des Documents abgefragt, in der Hoffnung, dass hier etwas brauchbares steht. (War bei mir in der Regel so).
Ja, zumindest bei mir ist das in diesem Sinne angekommen, denn natürlich wäre es mir kein:
Respekt - prima Lösung [...]
wert gewesen, wenn Du einen Code veröffentlicht hättest der die URL eines template ermittelt die (weil das template in die Vorlagenverwaltung integriert ist) aus dem Dokument gelesen werden kann.

Der Kern weshalb ich mich lobend äußerte war also:

Code: Alles auswählen

args = document.Args
   For i = LBound(args()) To UBound(args())
      If args(i).Name = "URL" Then
         result = args(i).Value
         Exit For
      End If
   Next i


Deswegen hat Winfried nun mit seinem Einwurf natürlich trotzdem recht (wie ich mich im Nachhinein überzeugt habe), nur war das nicht im Mittelpunkt meines Interesses (wenn man so sagen darf).
Ich bitte also ggf. die Verwirrung zu entschuldigen die ich (der ich routiniert mit StarBasic umgehe) u.U. dadurch verursacht habe das ich mich über ein Code-Konstrukt lobend geäußert habe, welches eine interessante (nicht allgemein bekannte) Teillösung enthielt und dabei nicht hinreichend berücksichtigte das andere Code-Teile ggf. OOo-versionsabhängig nicht funktionieren. Letzteres geschah nur weil diese Codeteile (für mich) üblich und deshalb ohne besonderes Interesse sind.




Gruß
Stephan

Re: Wie kann ich einen Dateipfad ermitteln??

von hawkhunter2002 » Do, 09.07.2009 16:45

komma4 hat geschrieben:Achtung:
Der Service DocumentInfo ist seit der Version 3 deprecated, d.h. der Code muss nicht mehr funktionieren: http://api.openoffice.org/docs/common/r ... tInfo.html
Danke für die Info :oops: hatte ich leider noch nicht bemerkt.
Hier nochmal der Code mit den neuen Erkenntnissen.

Code: Alles auswählen

Sub Main
 msgbox Urlpfad()
End Sub

'Funktion um den Pfad zur OrginalVorlage zu erhalten
Function getLoadedUrl(document As Object) As String
	DIM result as String
	DIM Args as Any
	DIM i as Integer
	
	result = ""
	args = document.Args
	For i = LBound(args()) To UBound(args())
		If args(i).Name = "URL" Then
			result = args(i).Value
			Exit For
		End If
	Next i
	getLoadedUrl() = result
End Function


Function Urlpfad()
	dim url as any
	
	url = ThisComponent.getDocumentProperties().TemplateURL ' Dateiname mit Pfad der zuständigen Vorlage

	If url = ""  Then
		url = getLoadedUrl(ThisComponent)
	
		If url = "" Then
			MsgBox "Warnung! Kein Pfad zur Vorlage/Dokumentherkunft bekannt!"		
			url = ThisComponent.URL
			If url = "" Then
				MsgBox "Shit happens..."
				Exit Function
			End If
		End If
	End If
	UrlPfad = url
End Function
Wer sich den Code genauer angesehen hat, wird aber wohl eh erkannt haben, dass weder in der alten Eigenschaft "TemplateFileName" noch in der neuen "TemplateURL" der Pfad zur Vorlage steht (Also bei mir sind diese Eigenschaften meisten Strings der Länge Null). Wenn dies der Fall ist werden die Args()-in der Function "getLoadedUrl"- des Documents abgefragt, in der Hoffnung, dass hier etwas brauchbares steht. (War bei mir in der Regel so).

Gruß

Hawk

Re: Wie kann ich einen Dateipfad ermitteln??

von komma4 » Do, 09.07.2009 15:31

der.milco hat geschrieben:Er führt zur Fehlermeldung: "Methode oder Eigenschaft nicht gefunden"
Das hat damit zu tun, das die Eigenschaft TemplateFileName ab Version 3 nun TemplateURL heisst:
http://api.openoffice.org/docs/common/r ... rties.html

Re: Wie kann ich einen Dateipfad ermitteln??

von der.milco » Do, 09.07.2009 09:49

Schön und gut; der dort beschriebene Ersatz DocumentProperties funktioniert allerdings nicht!!
Er führt zur Fehlermeldung: "Methode oder Eigenschaft nicht gefunden"

Ich bleibe bei DocumentInfo.

Re: Wie kann ich einen Dateipfad ermitteln??

von komma4 » Mi, 08.07.2009 09:19

Achtung:
Der Service DocumentInfo ist seit der Version 3 deprecated, d.h. der Code muss nicht mehr funktionieren: http://api.openoffice.org/docs/common/r ... tInfo.html

Re: Wie kann ich einen Dateipfad ermitteln??

von der.milco » Mi, 08.07.2009 08:05

hawkhunter2002 hat geschrieben:Versuchs einfach mal
Habe ich. Und...

es funktioniert!!! SUPI. :D
Thx to hawkhunter2002

Re: Wie kann ich einen Dateipfad ermitteln??

von Stephan » Di, 07.07.2009 10:54

ich hatte dieses Problem schon vor Jahren noch unter OOo 2.02 so.
Unsere Lösung damals war folgende
Respekt - prima Lösung, funktioniert tadellos.



Gruß
Stephan

Re: Wie kann ich einen Dateipfad ermitteln??

von hawkhunter2002 » Di, 07.07.2009 07:18

Hallo der.milco

ich hatte dieses Problem schon vor Jahren :) noch unter OOo 2.02 so.
Unsere Lösung damals war folgende.

Code: Alles auswählen

Sub Main
 msgbox Urlpfad()
End Sub

'Funktion um den Pfad zur OrginalVorlage zu erhalten
Function getLoadedUrl(document As Object) As String
	DIM result as String
	DIM Args as Any
	DIM i as Integer
	
	result = ""
	args = document.Args
	For i = LBound(args()) To UBound(args())
		If args(i).Name = "URL" Then
			result = args(i).Value
			Exit For
		End If
	Next i
	getLoadedUrl() = result
End Function


Function Urlpfad()
	dim url as any
	
	url = ThisComponent.getDocumentInfo().TemplateFileName ' Dateiname mit Pfad der zuständigen Vorlage
	
	If url = ""  Then
		url = getLoadedUrl(ThisComponent)
		
		If url = "" Then
			MsgBox "Warnung! Kein Pfad zur Vorlage/Dokumentherkunft bekannt!"		
			url = ThisComponent.URL
			If url = "" Then
				MsgBox "Shit happens..."
				Exit Function
			End If
		End If
	End If
	UrlPfad = url
End Function
Versuchs einfach mal

Gruß Hawk

PS: Die Reihenfolge der Functions ist didaktisch nicht ganz richtig 8) und wahrscheinlich kann man das ganze auch in eine sub schreiben, aber mir sind mehrere kleine übersichtliche Funktionen lieber als eine große Sub.

Re: Wie kann ich einen Dateipfad ermitteln??

von Stephan » Di, 07.07.2009 00:03

Könnte man nicht den gewünschten Pfad in einer Environmentvariablen oder in einer Ini-Datei hinterlegen?
Dann müsste man das auf jedem Rechner einmal so konfigurieren und fertig ist die Sache.
Sicher könnte man das, aber wenn man vorausetzt das solche Änderungen zulässig sind, als das Finden des Pfades nicht ohne Veränderungen im System funtionieren muß sind doch solche Veränderungen nicht die erste Wahl, da statisch.
Ich hatte schon gesschrieben das ich dann eine einfache Batch-Datei nutzen würde um den ohnehin automatisch übergebenen Parameter %1 in soffice -n %1 abzufangen, denn der enthält den gewünschten Pfad der Vorlagendatei.



Gruß
Stephan

Re: Wie kann ich einen Dateipfad ermitteln??

von eBayer » Mo, 06.07.2009 18:22

Hallo, ich verfolge diese Diskussion schon eine Weile.
Habe zwar kein Expertenwissen, aber trotzdem einen Vorschlag.
Könnte man nicht den gewünschten Pfad in einer Environmentvariablen oder in einer Ini-Datei hinterlegen?
Dann müsste man das auf jedem Rechner einmal so konfigurieren und fertig ist die Sache.
Ich habe so etwas ähnliches in ooBase gemacht (Environmentvariable), um zusätzliche Informationen aus einer Textdatei einzulesen.
Gruß eBayer

Re: Wie kann ich einen Dateipfad ermitteln??

von Stephan » Mo, 06.07.2009 14:55

Das verstehe ich nicht ganz. Ist das eine andere Funktion/Befehl als wenn ich über Menü>Datei>Speichern unter...>Vorlage abspeichere?
Ja.

Genau deswegen habe ich ja heute Nacht kurz geantwortet um zu verdeutlichen das Du wahrsacheinlich keine integrierte Dokumentvorlage benutzen möchtest, weil mir der Einwurf von Winfried einleuchtete, sein mAkro aber nur für integrierte Vorlagen funktioniert.

Eine Dokumentvorlage wird dann in das Dokument eingetragen, wenn sie zum Zeitpunkt ihrer Benutzung in die Vorlagenverwaltung integriert ist. Das ist sie automatisch wenn Du über Datei-Dokumerntvorlage-Speichern speicherst letztlich aber auch wenn Du irgendwie (z.B. Datei-Speuichern) die Vorlagendatei in dem oder den richtigen Vorlagenordner speicherst oder reinkopierst.

Da nun Wilfrieds Vorschlag nur für integrierte Vorlagen klapptwar seine Kritik:
Naja, wenn Du unbedingt im Pfad der Vorlage speichern möchtest ... ?
so zu verstehen da er nicht versteht warum Du praktisch die erzeugten Dokumente immer im selben Pfad speichern willst, weil sie dort gespeichert werden sollen woi die Vorlagen sind, deren Speicherort aber nicht beliebig sein darf solange der Mechanismus der Integration der Vorlagen unnd deren Auslesen per Basic normal funktionieren soll.


Schön wärs gewesen wenn Du meinen ursprüngliche Hinweis gelesen und durchdacht hättest, dann hätte ich mir den Roman hier sparen können.
In Wahrheit gehts hier im Übrigen um OOo-Grundlagen und keinesfalls um exotische Expertenkenntnisse. Nein, ich behaupte nicht man muß das automatisch wissen, man muß das aber lernen wenn man vernüftig mit OOo arbeiten will und man sollte es wissen wenn man OOo programmiert.


Eine einfache Lösung zu Deinem Problem sehe ich derzeitig nicht wenn alles automatisch laufen soll. Du müßtest Dir wohlö ein andees Vorgehen überlegen oder andere 'Rahmenbedingungen' nennen damit wir bessere/andere Vorschläge machen können.


Gruß
Stephan

Re: Wie kann ich einen Dateipfad ermitteln??

von der.milco » Mo, 06.07.2009 14:30

komma4 hat geschrieben:Dann wird sich die Vorlage nicht in Deinem Dokument 'verewigt' haben:
kontrolliere, ob Du bei Datei>Eigenschaften...>Allgemein>Vorlage etwas stehen hast... wahrscheinlich nicht.
Das stimmt. Die Zeile ist bei mir leer.

turtle47 hat geschrieben:Das funktioniert nur dann, wenn man das Dokument als Dokumentvorlage abgespeichert hat via
Menue > Dokumentvorlage > Speichern ....
Das verstehe ich nicht ganz. Ist das eine andere Funktion/Befehl als wenn ich über Menü>Datei>Speichern unter...>Vorlage abspeichere?
Auf jeden Fall ist das Verzeichnis das von dir beschriebene (User/Anwendungsdaten/OpenOffice.org/3/user/template).
Und selbst wenn ich das mache und darunter abspeichere, bleibt die Zeile im Fenster [Menü>Datei>Eigenschaften...>Allgemein>Vorlage] leer.
turtle47 hat geschrieben:Als Workaround würde ich vorschlagen den Speicherpfad in der Dokumenteninfo > Reiter Benutzer > Info 1 zu hinterlegen.
Eintragen kann man wie folgt:

Code: Alles auswählen

Sub URL_Eintragen
       GlobalScope.BasicLibraries.LoadLibrary("Tools")
       EintragURL = DirectoryNameoutofPath(convertfromurl(thisComponent.url),"\")
       thiscomponent.getDocumentInfo.setUserFieldValue(0,EintragURL)
End Sub
Grundsätzlich ne gute Idee, aber ich kann mich nicht auf thisComponent.url beziehen, da ein neu erzeugtes Dokument ja keine URL hat.
Oder kann ich das Verzeichnis der Vorlage irgendwie an OO übergeben, bevor es daraus ein neues Dokument erzeugt, welches ich dann im neuen Dok wieder abfragen kann?

Re: Wie kann ich einen Dateipfad ermitteln??

von turtle47 » Mo, 06.07.2009 13:50

Hallo Zusammen,
komma4 hat geschrieben:Dann wird sich die Vorlage nicht in Deinem Dokument 'verewigt' haben:
Das funktioniert nur dann, wenn man das Dokument als Dokumentvorlage abgespeichert hat via
Menue > Dokumentvorlage > Speichern ....
Der Pfad dahin lauten dann z.B.

Code: Alles auswählen

file:///C:/Dokumente%20und%20Einstellungen/User/Anwendungsdaten/OpenOffice.org/3/user/template/MeineCalcVorlage.ots
Aber ich glaube das ist von der.milco nicht so gewollt.

Als Workaround würde ich vorschlagen den Speicherpfad in der Dokumenteninfo > Reiter Benutzer > Info 1 zu hinterlegen.

Eintragen kann man wie folgt:

Code: Alles auswählen

Sub URL_Eintragen
	GlobalScope.BasicLibraries.LoadLibrary("Tools")
	EintragURL = DirectoryNameoutofPath(convertfromurl(thisComponent.url),"\")
	thiscomponent.getDocumentInfo.setUserFieldValue(0,EintragURL)
End Sub
Auslesen wie folgt:

Code: Alles auswählen

Sub URL_Auslesen
	EintragURL= thisComponent.DocumentInfo.getUserFieldValue(0)
	msgbox EintragURL	
End Sub
Viel Erfolg.

Jürgen

Re: Wie kann ich einen Dateipfad ermitteln??

von komma4 » Mo, 06.07.2009 13:20

der.milco hat geschrieben:die Msgbox bleibt immer leer und es kommt keine Fehlermeldung!
Dann wird sich die Vorlage nicht in Deinem Dokument 'verewigt' haben:
kontrolliere, ob Du bei Datei>Eigenschaften...>Allgemein>Vorlage etwas stehen hast... wahrscheinlich nicht.

Re: Wie kann ich einen Dateipfad ermitteln??

von der.milco » Mo, 06.07.2009 12:59

komma4 hat geschrieben:

Code: Alles auswählen

ThisComponent.DocumentProperties.TemplateURL
gilt erst ab ab Version 3
Das funktioniert bei mir nicht und ich habe OO 3.0.1.
Ich bekomme mit diesem Code nur eine leere MsgBox, wenn ich folgendes Makro abspiele:

Code: Alles auswählen

Sub Vorlagen_URL
	msgbox ThisComponent.DocumentProperties.TemplateURL
End Sub
Muss ich da vorher noch eine Bibliothek anmelden oder irgendeine Variable definieren?

Übrigens: Egal ob ich das Dokument als ODS oder als OTS oder als ein neu erzeugtes Dok aus einer Vorlage geöffnet habe; die Msgbox bleibt immer leer und es kommt keine Fehlermeldung!

Nach oben