Wie kann ich einen Dateipfad ermitteln??
Moderator: Moderatoren
Wie kann ich einen Dateipfad ermitteln??
Hallo zusammen!
Ich arbeite mit OO 3.0 unter WinXP und habe folgendes Problem:
Ich möchte in einem geöffnetem CALC-Dokument den aktuellen Dateipfad ermitteln, damit ich mit einem anderen Makro neue Dokumente im selben Verzeichnis erzeugen und speichern kann. Das muss ich aber ersteinmal herausfinden, wo mein aktuell geöffnete Tabelle gespeichert ist.
Der Dateiordner soll später auf verschiedenen Rechern existieren; unterschiedliche Benutzer haben allerdings unterschiedliche Verzeichnisse, sodass ich das nicht im Voraus festlegen kann.
Ich habe sämtliche Codes gefunden, die den Pfad, den Dokumentnamen, die Erweiterung usw. aus einem als Text vorliegendes Verzeichnis isolieren.
Aber nirgens einen Hinweis, wie ich das Verzeichnis ermitteln kann.
Auch hier habe ich die Foren vergeblich durchsucht.
Kann jemand helfen?
Ich arbeite mit OO 3.0 unter WinXP und habe folgendes Problem:
Ich möchte in einem geöffnetem CALC-Dokument den aktuellen Dateipfad ermitteln, damit ich mit einem anderen Makro neue Dokumente im selben Verzeichnis erzeugen und speichern kann. Das muss ich aber ersteinmal herausfinden, wo mein aktuell geöffnete Tabelle gespeichert ist.
Der Dateiordner soll später auf verschiedenen Rechern existieren; unterschiedliche Benutzer haben allerdings unterschiedliche Verzeichnisse, sodass ich das nicht im Voraus festlegen kann.
Ich habe sämtliche Codes gefunden, die den Pfad, den Dokumentnamen, die Erweiterung usw. aus einem als Text vorliegendes Verzeichnis isolieren.
Aber nirgens einen Hinweis, wie ich das Verzeichnis ermitteln kann.
Auch hier habe ich die Foren vergeblich durchsucht.
Kann jemand helfen?
Re: Wie kann ich einen Dateipfad ermitteln??
Hallo
gibt den Pfad zur gerade aktiven Datei aus sofern diese schon einen Speicherort hat.
Gruß Karo
Code: Alles auswählen
...
surl = thiscomponent.url
'oder
'surl = thiscomponent.location
apfad = split(surl,"/")
apfad(ubound(apfad)) = ""
spfad = join(apfad,"/")
msgbox spfad
....
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Re: Wie kann ich einen Dateipfad ermitteln??
Hallo Zusammen,
ich hätte das so gelöst:
Jürgen
ich hätte das so gelöst:
Code: Alles auswählen
Sub Main
msgbox DirectoryNameoutofPath(convertfromurl(thisComponent.url),"\")
End Sub
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Wie kann ich einen Dateipfad ermitteln??
Bei Jürgens Lösung muss die Bibliothek TOOLS geladen werden (darin befindet sich die Funktion DirectoryNameoutofPath)
Ausserdem würde ich den Pfadtrenner durch die (undokumentierte) Funktion getPathSeparator() bestimmen lassen, damit der Code auch wahlweise unter anderen (nicht-Windows) Betriebssystemen läuft.
Ausserdem würde ich den Pfadtrenner durch die (undokumentierte) Funktion getPathSeparator() bestimmen lassen, damit der Code auch wahlweise unter anderen (nicht-Windows) Betriebssystemen läuft.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Wie kann ich einen Dateipfad ermitteln??
Hallo nochmal,
ich habe jetzt den Code von Jürgen genommen. Der ist kurz und macht genau das, was ich haben möchte.
ALLERDINGS....
Jetzt habe ich das Problem dass meine Tabelle (wenn sie zuende programmiert ist) später eine Vorlage sein soll. Wenn ich dann auf die Vorlage klicke, erstellt sich ja ein neues noch unbenanntes Dokument, das noch nicht gespeichert wurde (und auch nicht am Anfang gespeichert werden soll! Die Tabelle soll mit Daten aus einer anderen Datei gefüllt werden und erst dann gespeichert werden, da die fremden Daten auch gleichzeitig den Dateinamen bestimmen).
Wenn ich jetzt laufen lasse, kommt eine Fehlermeldung. Ist ja auch klar, denn das Dokument hat ja noch keinen Speicherort und kann deswegen nicht seinen Pfad nennen.
Gibt es jetzt eine Möglichkeit, dass ich den Speicherort der Vorlage ermitteln kann, mit der das neue Dokument erzeugt wurde??
Evtl. kann der Speicherort der Vorlage mit dem Erzeugen eines Dokuments als Variable (oder so) übergeben werden !?!?!?
Geht so was??
ich habe jetzt den Code von Jürgen genommen. Der ist kurz und macht genau das, was ich haben möchte.
ALLERDINGS....
Jetzt habe ich das Problem dass meine Tabelle (wenn sie zuende programmiert ist) später eine Vorlage sein soll. Wenn ich dann auf die Vorlage klicke, erstellt sich ja ein neues noch unbenanntes Dokument, das noch nicht gespeichert wurde (und auch nicht am Anfang gespeichert werden soll! Die Tabelle soll mit Daten aus einer anderen Datei gefüllt werden und erst dann gespeichert werden, da die fremden Daten auch gleichzeitig den Dateinamen bestimmen).
Wenn ich jetzt
Code: Alles auswählen
thisComponent.url
Gibt es jetzt eine Möglichkeit, dass ich den Speicherort der Vorlage ermitteln kann, mit der das neue Dokument erzeugt wurde??
Evtl. kann der Speicherort der Vorlage mit dem Erzeugen eines Dokuments als Variable (oder so) übergeben werden !?!?!?
Geht so was??
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Wie kann ich einen Dateipfad ermitteln??
Naja, wenn Du unbedingt im Pfad der Vorlage speichern möchtest ... ?
nehme gilt erst ab ab Version 3
nehme
Code: Alles auswählen
ThisComponent.DocumentProperties.TemplateURL
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Wie kann ich einen Dateipfad ermitteln??
Ich nehme mal an es geht darum den Pfad für eine nicht in die Vorlagenverwaltung integrierte Dokumentvorlage zu bestimmen, ich kann dafür aber auf die Schnelle nichts vorschlagen, wobei die Info vorhanden sein müßte, denn es ist der beim Aufruf an soffice übergebene %1-Parameter in soffice -n "%1". Mittels z.B. batch ginge das, aber direkt weiß ich derzeitig nicht wie.Naja, wenn Du unbedingt im Pfad der Vorlage speichern möchtest ... ?
Gruß
Stephan
Re: Wie kann ich einen Dateipfad ermitteln??
Das funktioniert bei mir nicht und ich habe OO 3.0.1.komma4 hat geschrieben:gilt erst ab ab Version 3Code: Alles auswählen
ThisComponent.DocumentProperties.TemplateURL
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
Ü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!
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Wie kann ich einen Dateipfad ermitteln??
Dann wird sich die Vorlage nicht in Deinem Dokument 'verewigt' haben:der.milco hat geschrieben:die Msgbox bleibt immer leer und es kommt keine Fehlermeldung!
kontrolliere, ob Du bei Datei>Eigenschaften...>Allgemein>Vorlage etwas stehen hast... wahrscheinlich nicht.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Wie kann ich einen Dateipfad ermitteln??
Hallo Zusammen,
Menue > Dokumentvorlage > Speichern ....
Der Pfad dahin lauten dann z.B.
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:
Auslesen wie folgt:
Viel Erfolg.
Jürgen
Das funktioniert nur dann, wenn man das Dokument als Dokumentvorlage abgespeichert hat viakomma4 hat geschrieben:Dann wird sich die Vorlage nicht in Deinem Dokument 'verewigt' haben:
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
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
Code: Alles auswählen
Sub URL_Auslesen
EintragURL= thisComponent.DocumentInfo.getUserFieldValue(0)
msgbox EintragURL
End Sub
Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Re: Wie kann ich einen Dateipfad ermitteln??
Das stimmt. Die Zeile ist bei mir leer.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 verstehe ich nicht ganz. Ist das eine andere Funktion/Befehl als wenn ich über Menü>Datei>Speichern unter...>Vorlage abspeichere?turtle47 hat geschrieben:Das funktioniert nur dann, wenn man das Dokument als Dokumentvorlage abgespeichert hat via
Menue > Dokumentvorlage > Speichern ....
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.
Grundsätzlich ne gute Idee, aber ich kann mich nicht auf thisComponent.url beziehen, da ein neu erzeugtes Dokument ja keine URL hat.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
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??
Ja.Das verstehe ich nicht ganz. Ist das eine andere Funktion/Befehl als wenn ich über Menü>Datei>Speichern unter...>Vorlage abspeichere?
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:
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.Naja, wenn Du unbedingt im Pfad der Vorlage speichern möchtest ... ?
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??
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
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
Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz mit 4 GB Memory (3,2 GB aktiv)
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Vista Home Premium 32 Bit
openOffice 3.1.1 mit Sun Report Builder 1.1.0 und MySql 5.1
Hauptinteresse ooBase seit 12.2008
Re: Wie kann ich einen Dateipfad ermitteln??
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.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 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
-
- **
- Beiträge: 32
- Registriert: So, 25.02.2007 09:11
- Wohnort: Ingolstadt
Re: Wie kann ich einen Dateipfad ermitteln??
Hallo der.milco
ich hatte dieses Problem schon vor Jahren
noch unter OOo 2.02 so.
Unsere Lösung damals war folgende.
Versuchs einfach mal
Gruß Hawk
PS: Die Reihenfolge der Functions ist didaktisch nicht ganz richtig
und wahrscheinlich kann man das ganze auch in eine sub schreiben, aber mir sind mehrere kleine übersichtliche Funktionen lieber als eine große Sub.
ich hatte dieses Problem schon vor Jahren

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
Gruß Hawk
PS: Die Reihenfolge der Functions ist didaktisch nicht ganz richtig

OOO Basic Programmierers best Friend XRay-Tool