Seite 1 von 1

Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Do 18. Mai 2017, 11:42
von hasta_17
Hallo,
gibt es eine Möglichkeit den Dateinamen unter dem ein Calcsheet gespeichert wird aus einer Tabellenzelle zu entnehmen.

Hintergrund: Ich habe Formulare als Calctabelle angelegt. Hier ändern sich nur die Kundennamen und die Tabellen sollen automatisch unter dem eingegebenen Kundennamen gespeichert werden.

Hasta

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Mo 10. Jul 2017, 14:31
von herz4
Hallo Hasta,

ich habe ein ähnliches Problem für ein Writer-Dokument vor längerer Zeit wie folgt gelöst:

Dim FileProperties(3) As New com.sun.star.beans.PropertyValue
path=createunoservice("com.sun.star.util.PathSettings")
FileProperties(0).Name = "AsTemplate"
FileProperties(0).Value =True
FileProperties(1).Name = "SuggestedSaveAsDir"
FileProperties(1).Value = ConvertToURL(ConvertFromURL(path.work) & IIF(BIFFORDN<>"",IIF(PASZORDN<>"", "\" & BIFFORDN & "\" & PASZORDN,"\" & BIFFORDN),""))
FileProperties(2).Name = "SuggestedSaveAsName"
FileProperties(2).Value =Dateiname & ".odt"
FileProperties(3).Name = "DocumentTitle"
FileProperties(3).Value =Dateiname
Doc = StarDesktop.loadComponentFromURL(URL, "_blank", 0, FileProperties())

Dabei wird ein neues(!) Dokument geöffnet, dem aber schon Name, Speicherort und Dateiname vorgegeben werden, ohne dass es gespeichert wird. Ich speichere dann bewusst "händisch". Natürlich müssen alle Variablen zuvor deklariert werden; der Dateiname muss noch aus der ausgelesenen Calc-Zelle "gebastelt" werden ... usw. usf. Aufpassen: "\" für Linux, Windof braucht wohl "/" !

Die Richtung könnte aber stimmen ...

Gruß von - herz4!

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Mo 10. Jul 2017, 21:55
von gogo
Quick and dirty:

Code: Alles auswählen

sub CalcSheetSpeichernUnter
  ZellInhalt = thisComponent.sheets(0).getCellByPosition(0,0).string
  sURL = ConvertToURL("/Pfad/Zum/Verzeichnis/Formular_X_Kunde_" & ZellInhalt & ".ods")
  thisComponent.storeAsURL(sUrl,array())
end sub
Liest aus der Zelle A1 (.getCellByPosition(0,0)) den Wert aus und kombiniert ihn mit dem fix vorgegebenen Pfad. Dann wird das aktuelle Dokument mittels .storeAsURL() gespeichert.

Das Makro am besten unter "Meine Makros/Standard/Module1" speichern und einem Button in einer Calc-Symbolleiste zuordnen.

Codebeispiele dieser Art findet man (immer) noch unter http://www.dannenhoefer.de/faqstarbasic ... hreib.html

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Do 3. Jan 2019, 14:03
von AK84CH
Grüezi

...Ich habe das so eingespeichert. Allerdings leicht modifiziert.... Ich nutze eigentlich immer OpenOffice, musste nun aber auf Libre (6.0.7) umsteigen und mein bisheriges Makro geht nicht mehr:
___
Sub Speichern_17
dim dummy()
dummy = Array()
myDoc=thisComponent
mySheet=myDoc.sheets(0)
myCell=mySheet.getCellByPosition(18,17)
myString=myCell.string
datei = Environ("USERPROFILE") & "\Dropbox\KOJ_INTRANET\Phonem-Messung\" & myString & ".ods"
dateiurl=converttourl(datei)
myDoc.storeasurl(dateiurl, dummy())
END SUB
___


Das folgende und vorgeschlagene Makro haben ich nun entsprechend adaptiert, da ich diese Calc-Datei von mehreren unterschiedlich eingerichteten WIN-Rechnern (mit andere Benutzernamen) öffnen muss:
___
sub CalcSheetSpeichernUnter
ZellInhalt = thisComponent.sheets(0).getCellByPosition(18,19).string
sURL = ConvertToURL(Environ("USERPROFILE") & "\Dropbox\KOJ_INTRANET\Phonem-Messung\" & ZellInhalt & ".ods")
thisComponent.storeAsURL(sUrl,array())
end sub
___

Aber hier kommt nun immer der folgende Fehler:
"BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.task.ErrorCodeIOException
Message: SfxBaseModel::impl_store <file:///Dropbox/KOJ_INTRANET/Phonem-Messung/.ods> failed: 0x507."

-> was mache ich falsch?

Vielen Dank für die Hilfe!

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Do 3. Jan 2019, 16:33
von mikele
Hallo,
Message: SfxBaseModel::impl_store <file:///Dropbox/KOJ_INTRANET/Phonem-Messung/.ods> failed: 0x507.
Auf alle Fälle scheint die Zelle aus der du den Dateinamen lesen willst leer zu sein. Ein Dateiname mit nur ".ods" geht nicht.

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Fr 4. Jan 2019, 12:38
von AK84CH
Danke, diesen Fehler habe ich behoben. Nun sieht das Code wie folgt aus:

sub CalcSheetSpeichernUnter
ZellInhalt = thisComponent.sheets(0).getCellRangeByName("F18").string
sURL = ConvertToURL(Environ("USERPROFILE") & "\Dropbox\KOJ_INTRANET\Phonem-Messung\" & ZellInhalt & ".ods")
thisComponent.storeAsURL(sURL,array())
end sub

Fehlermeldung bleibt:
"BASIC-Laufzeitfehler.
Es ist eine Ausnahme aufgetreten
Type: com.sun.star.task.ErrorCodeIOException
Message: SfxBaseModel::impl_store <file:///Dropbox/KOJ_INTRANET/Phonem-Messung/1940.ods> failed: 0x507."

Kann es damit zu tun haben, dass dass die geöffnete Datei eine "unbenannt 1" Datei ist? noch nicht lokal gespeichert und geöffnet aus einer .ots-Vorlage?
Oder ist wird der Pfad nicht richtig ausgelesen?

‎"Macintosh HD⁩ ▸ ⁨Benutzer⁩ ▸ ⁨ABC ▸ ⁨123 Dropbox⁩ ▸ ⁨abc⁩ ▸ ⁨KOJ_INTRANET⁩ ▸ ⁨Phonem-Messung⁩"

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Fr 4. Jan 2019, 16:51
von mikele
Hallo,
offensichtlich liefert

Code: Alles auswählen

Environ("USERPROFILE")
einen leeren String und nicht, wie gewünscht, das Benutzerverzeichnis (unter Windows sollte es das).
Leider habe ich keine Ahnung, die entsprechende Umgebungsvariable unter MacOS heißt (ich vermute mal, dass das dein BS ist). Bei Linux wäre es Environ("HOME").

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Fr 4. Jan 2019, 19:38
von balu
Hallo AK84CH,
Kann es damit zu tun haben, dass dass die geöffnete Datei eine "unbenannt 1" Datei ist? noch nicht lokal gespeichert und geöffnet aus einer .ots-Vorlage?
Mit storeAsURL wird die aktuelle Datei mit dem neuen Dateinamen am angegebenem Ort gespeichert. Die geöffnete Datei bekommt aber dabei einen neuen Namen.

Mit storeToURL wird die aktuelle Datei unter einem neuen Dateinamen am angegebenem Ort gespeichert. Die geöffnete und unbenannte Datei behält aber ihren aktuellen Namen bei, selbst wenn sie "unbenannt 1.ods" heißt (also eine neue und leere Datei).

Oder ist wird der Pfad nicht richtig ausgelesen?
Selber feststellen, da wir nicht auf deinem Schoß sitzen. ;)
Mach mal aus diesen 2 Zeilen

Code: Alles auswählen

sURL = ConvertToURL(Environ("USERPROFILE") & "\Dropbox\KOJ_INTRANET\Phonem-Messung\" & ZellInhalt & ".ods")
thisComponent.storeAsURL(sURL,array())
ganz einfach folgendes.

Code: Alles auswählen

sURL = ConvertToURL(Environ("USERPROFILE") & "\Dropbox\KOJ_INTRANET\Phonem-Messung\" & ZellInhalt & ".ods")
PRINT sURL
REM thisComponent.storeAsURL(sURL,array())' auskommentiert, es wird also nicht gespeichert.
Und dann schau selber mal nach ob der gesamte Pfad inklusive Dateiname korrekt ist.



Gruß
balu

Re: Speichern unter: Dateinamen aus Zelle auslesen

Verfasst: Sa 5. Jan 2019, 15:00
von gogo
oder zuerst mal mit fileexists prüfen ob das Verzeichnis überhaupt gefunden wird:

Code: Alles auswählen

sURL = ConvertToURL(Environ("USERPROFILE") & "\Dropbox\KOJ_INTRANET\Phonem-Messung\")
msgbox fileexists(sURL)
ein "true" bedeutet, dass es das Verzeichnis gibt. Wenn dann noch immer ein I/O-Fehler kommt hast Du Probleme mit den Schreibrechten.

Falls Du eine sinnvolle Rückmeldung vom Benutzer brauchst:

Code: Alles auswählen

sURL = ConvertToURL(Environ("USERPROFILE") & "\Dropbox\KOJ_INTRANET\Phonem-Messung\")
if not fileexists(sURL) then
	msgbox("Das Verzeichnis in dem gespeichert werden soll ('" & sURL &"') kann nicht gefunden werden!")
end if