BITTE helfen Sie uns das LibreOffice Forum zu erhalten!
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.


❤️ DANKE >><< DANKE ❤️

Herzlichen Dank an Alle, die bisher gespendet haben! Spenden heute: 0 Euro
>DANK IHRER SPENDEN -> KEINE WERBUNG FÜR REGISTRIERTE LIBREOFFICE-FORUM-USER!<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗


Writer, Speicherpfad per vba vorgeben

Alles zur Programmierung im LibreOffice.
Antworten
JulianLE
Beiträge: 3
Registriert: Sa 7. Jan 2012, 17:57

Writer, Speicherpfad per vba vorgeben

Beitrag von JulianLE » Sa 7. Jan 2012, 18:04

Hallo zusammen,
ich möchte ein Word Makro in Libreoffice Writer überführen und bis auf wenige Dinge klappt es schon ganz gut.
Wie bekomme ich es hin, dass ich einen Speicherort für das Dokument vorschlage. Ich möchte also im Prinzip einen Dateinamen per Makro vorschlagen (z.B. D:\Dokumente\meinedatei.doc). Wenn die Prozedur aufgerufen wird, soll der Speichern Dialog im Verzeichnis D:\Dokumente aufgehen und der Dateiname meinedatei.doc vorausgefüllt sein.
In Word läuft es über
With Dialogs(wdDialogFileSaveAs)
.Name = Dateiname
.Show
End With

dies wird in Libreoffice angemeckert (Laufzeitfehler 423, Name).
Danke für jede Hilfe :-)
Julian

Bertold

Re: Writer, Speicherpfad per vba vorgeben

Beitrag von Bertold » Sa 7. Jan 2012, 19:21

Hallo,

LibreOffice (und OpenOffice) verwenden die Makrosprache"Starbasic" und nicht vba.

Hier ist ein Handbuch
http://zid-luxinst.uibk.ac.at/mirror/st ... ide_de.pdf

Wiki - Starbasic, wo du auch ein PDF-Dokument zur Übertragung von Excel-VBA zu StarBasic (Calc) findest
http://www.ooowiki.de/StarBasic#Siehe_auch

und bei Dannenhöfer findest du wertvolle Tipps
http://www.dannenhoefer.de/faqstarbasic ... l#Zweig133

-> Übrigens, Standard-Dateiformat ist bei LibreOffice ODF und nicht .doc.

Frieder
Beiträge: 28
Registriert: Di 13. Dez 2011, 12:28
Kontaktdaten:

Re: Writer, Speicherpfad per vba vorgeben

Beitrag von Frieder » So 8. Jan 2012, 17:04

Hallo JulianLE

Unter LO ist das Leider nicht so einfach wie unter Word.
Unten habe ich ein Beispiel, wie du das machen kannst.
Allerdings musst du unter Windows auf Grund eines Bugs den Libreoffice eigenen Speichern-Dialog verwenden,
da sonnst der voreingestellte Pfad nicht im Dialog erscheint.
(Extras -> Optionen-> Libreoffice->Allgemein->Häkchen bei "Libreoffice-Dialoge verwenden")
Dieses Makro speichert nur in die Libreoffice eigenen Formate (ODF).
Willst du z.B. in Microsoft Formate speichern, musst du beim Speichern noch einen Filter verwenden.
Hier erstmal der Code

Code: Alles auswählen

Sub saveDocument
Dim sEnding$
Dim Dialogtyp(0)
dim sUrl$ ,sName$ 
Dim MyDialog
dim dummy()
On error goto Errorhandler
'Überprüfen, ob das dokument schoneinmahl gespeichert wurde.
  If 0 = len (thisComponent.getURL)Then
  'Falls nicht: überprüfen was es führ ein Dokument ist.
    If thisComponent.supportsService("com.sun.star.text.TextDocument") Then
      sEnding = ".odt"
    elseIf thisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
      sEnding = ".ods"
    elseIf thisComponent.supportsService("com.sun.star.presentation.PresentationDocument") Then
      sEnding = ".odp"
    elseIf thisComponent.supportsService("com.sun.star.drawing.DrawingDocument") Then
      sEnding = ".odg"  
    elseIf thisComponent.supportsService("com.sun.star.sdb.OfficeDatabaseDocument") Then
      sEnding = ".odb" 
    elseIf thisComponent.supportsService("com.sun.star.formula.FormulaProperties") Then
      sEnding = ".odf" 
    End if
    sName = thisComponent.Title & sEnding
  Else
    sName = thisComponent.Title
  End if
'Pfad auswahldialog initialisieren
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
myDialog.initialize( DialogTyp())
myDialog.displaydirectory=converttourl("c:\")
myDialog.DefaultName = sName
'Dialog ausführen, und überprüfen, ob mit Speichern bestätigt wurde
  If MyDialog.execute() = _
    com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
    ' ausgewählter Dateiname
    sUrl = MyDialog.Files(0)
    'Datei Speichern
    ThisComponent.storeAsUrl(sUrl,dummy())  'storeToUrl
  End if
Errorhandler:
End Sub
Gruß Frieder

Frieder
Beiträge: 28
Registriert: Di 13. Dez 2011, 12:28
Kontaktdaten:

Re: Writer, Speicherpfad per vba vorgeben

Beitrag von Frieder » So 8. Jan 2012, 17:56

Hallo JulianLE

Ich habe mein vorheriges Makro gerade ein wenig abgewandelt.
Jetzt funktioniert es nur noch für Writer-Dokumente,
exportiert diese aber gleich ins "MS Word 97/2000/2003/XP" also "*.doc" -Format.

Code: Alles auswählen

Sub saveWriterDocumentAs_doc
Dim Dialogtyp(0)
dim sUrl$ ,sName$ 
Dim MyDialog
Dim myProps(0) as New com.sun.star.beans.PropertyValue
dim aName () As String
Dim i%
On error goto Errorhandler
  ' überprüfen ob es ein Writer Dokument ist.
    If Not thisComponent.supportsService("com.sun.star.text.TextDocument") Then
      Exit Sub
    End if
'Überprüfen, ob das Dokument schon einmahl gespeichert wurde.
  If 0 = len (thisComponent.getURL) Then
    sName = thisComponent.Title & ".doc"
  Else
  'Wenn es bereits gespeichert wurde, und somit schon eine Endung hat:
    aName() =Split( thisComponent.Title, ".")
    for i=0 To UBound(aName())-1
     sName = sName & aName(i) & "."
    Next
    sName=sName & "doc"
  End if
'du kannst der Variablen sName natürlich auch selber einen Namen übergeben z.B.: sName = "meinedatei.doc"
'die Endung muß aber mit dem Filter (sihe unten ) übereinstimmen. 

'Pfad Auswahldialog initialisieren
MyDialog=createunoservice("com.sun.star.ui.dialogs.FilePicker")
'"Speichern" Stadt "OK" auf der Schaltfläche
DialogTyp(0) =com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE
MyDialog.initialize( DialogTyp())
'Start-Verzeichnis auswählen
MyDialog.displaydirectory=converttourl("c:\") 'Dieser Pfad kann angepasst werden
'Vorbestimmter Name der Datei
MyDialog.DefaultName = sName
'Anzeige-Filter. Dieser Filter hat keine auswirkungen auf den Speicher-Filter(es ist nur ein Kosmetisches Element)
MyDialog.appendFilter( "MS Word 97/2000/2003/XP", "*.doc" )'Es werden nur ".doc" dateien angezeigt
'Dialog ausführen, und überprüfen, ob mit Speichern bestätigt wurde
  If MyDialog.execute() = _
    com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
    ' ausgewählter Dateiname
    sUrl = MyDialog.Files(0)
   'MS Word Filter festlegen. Dieser Filter ist essentiel für das Speichern.
    myProps(0).Name="FilterName"
    myProps(0).Value = "MS Word 97"
    'Datei Speichern
    ThisComponent.storeAsUrl(sUrl,myProps())  '"storeToUrl" bewirkt, 
    'dass das dokument zwar unter der adresse gespeichert wird, 
    'aber das geöffnete dokument bleibt das unter dem vorherigen speicherort.
  End if
Errorhandler:
End Sub
Gruß Frieder

JulianLE
Beiträge: 3
Registriert: Sa 7. Jan 2012, 17:57

Re: Writer, Speicherpfad per vba vorgeben

Beitrag von JulianLE » Do 12. Jan 2012, 19:23

Hallo Frieder,
tausend Dank, das hat jetzt schonmal richtig weitergeholfen. Egal welchen Dialog ich verwende, den LO-eigenen oder nicht, er meldet sich zwar immer im zuletzt eingestellten Pfad, aber wenn ich ihm den kompletten Pfad inkl. Dateinamen übergebe, dann speichert er auch tatsächlich wo er soll. Es sieht zwar bisschen merkwürdig aus und ergibt ziemlich lange Einträge im Dialog, geht aber.
Nun gehe ich das nächste Problem an ;-)
Julian

Frieder
Beiträge: 28
Registriert: Di 13. Dez 2011, 12:28
Kontaktdaten:

Re: Writer, Speicherpfad per vba vorgeben

Beitrag von Frieder » Fr 13. Jan 2012, 11:47

Hallo Julian
JulianLE hat geschrieben: Egal welchen Dialog ich verwende, den LO-eigenen oder nicht, er meldet sich zwar immer im zuletzt eingestellten Pfad, ...
Dann hast du wahrscheinlich einen Fehler in der Syntax, oder der gewünschte Ordner existiert noch nicht.
Wenn er nicht Existiert, kann man ihn natürlich vorher per Makro erzeugen.

Code: Alles auswählen

sMyPath = "C:\Users\Nansen\Documents\Greiner Skript\ttt3"
 If Not FileExists(sMyPath)Then
   MkDir sMyPath
 End if
Am besten, du schickst mir deinen Code (wenn du ihn nicht hier veröffentlichen willst, kannst du ihn mir auch gerne als PN schicken).
Dann kann ich schauen, wo der Fehler liegt.

Mit dem LO eigenen Dialog funktioniert es bei mir immer!
Hier noch ein Beispiel für einen komplexeren Pfad.

Code: Alles auswählen

Dim sMyPath As String
sMyPath = "C:\Users\Nansen\Documents\Greiner Skript"
.....
.....
MyDialog.displaydirectory=converttourl(sMyPath)
Gruß Frieder

JulianLE
Beiträge: 3
Registriert: Sa 7. Jan 2012, 17:57

Re: Writer, Speicherpfad per vba vorgeben

Beitrag von JulianLE » Sa 21. Jan 2012, 12:27

Sorry Frieder, dass ich so spät antworte, ich war im Urlaub :-)
Ich hab es nun nochmal an meinem anderen Rechner probiert, auf dem ich Libreoffice nicht also portable version, sondern fest installiert habe. Wenn ich den Dialog auf den Libreoffice-eigenen umstellen, dann funzt es jetzt mit Deiner Methode.
Vielen Dank dafür!

An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten