Seite 1 von 1

Speichern unter Makro

Verfasst: So, 20.12.2015 15:00
von BritzFox
Hi,
hatte schon aus versehen im falschen Bereich gepostet...
Bin absolut neu, was OpenOffice Makros angeht.

Ich möchte ein Dokument per Makro speichern unter, aber noch die Möglichkeit haben den Dateinamen anzupassen.
Den Dateinamen nehme ich aus einer Zelle.
Mein bisheriges Makro...

Code: Alles auswählen

sub save2
  oDoc=thisComponent
  Sheet = oDoc.Sheets(0) '[erstes Arbeitsblatt]
  Cell = Sheet.getCellByPosition(12, 12)  '[Zelle B13]
  Filename = Cell.String
  Path = "file:///d:/daten/"
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "FilterName"
  args1(0).Value = "StarOffice XML (Calc)"
  oDoc.storeasurl(Path &  Filename & ".ods",args1())
end sub
Was muss ich denn ändern, damit hier nicht automatisch gespeichert wird, sondern der Dialog aufgeht mit dem Dateinamen aus Zelle B13 als Vorgabe zum speichern ?

Re: Speichern unter Makro

Verfasst: So, 20.12.2015 15:11
von Stephan
Hinweis:
args1(0).Value = "StarOffice XML (Calc)"
der richtige Filter ist eigentlich:

Code: Alles auswählen

args1(0).Value = "calc8"
"StarOffice XML (Calc)" entspricht (wenn ich mich momentan richtig erinnere) dem *.sxc Format, von OOo 1.x und StarOffice 6.

Dieser Filter ("calc8") kann aber auch entfallen, da er Default ist. Es genügt also:

Code: Alles auswählen

oDoc=thisComponent
  Sheet = oDoc.Sheets(0) '[erstes Arbeitsblatt]
  Cell = Sheet.getCellByPosition(12, 12)  '[Zelle A1]
  Filename = Cell.String
  Path = "file:///d:/daten/" 
  oDoc.storeasurl(Path &  Filename & ".ods", Array())
End Sub
Was muss ich denn ändern, damit hier nicht automatisch gespeichert wird, sondern der Dialog aufgeht mit dem Dateinamen aus Zelle B13 als Vorgabe zum speichern ?
z.B.:

Code: Alles auswählen

sub save2
  oDoc=thisComponent
  Sheet = oDoc.Sheets(0) '[erstes Arbeitsblatt]
  Cell = Sheet.getCellByPosition(12, 12)  '[Zelle A1]
  Filename = Cell.String
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "FilterName"
  args1(0).Value = "calc8"

  arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_AUTOEXTENSION) 
  dialog = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
  'Hinweis: der Dialog "com.sun.star.ui.dialogs.FilePicker" hat einen Bug bei .DisplayDirectory
  '         deshalb muss hier der OO-eigene Dialog .OfficeFilePicker genutzt werden
  dialog.Initialize(arg()) 
  dialog.appendFilter( "ODF Tabellendokument (*.ods)", "*.ods" )
  dialog.SetMultiselectionMode(False)
  dialog.DisplayDirectory = ConvertToURL("D:\Daten\")
  dialog.DefaultName = Filename
  ok = dialog.execute()
  if ok = 1 Then   
	datei = dialog.getFiles() 
	URL = datei(0) 
    oDoc.storeasurl(URL, args1())
  end if

end sub

Gruß
Stephan

Re: Speichern unter Makro

Verfasst: So, 20.12.2015 16:10
von BritzFox
Supi, das funktioniert...
Danke.

Re: Speichern unter Makro

Verfasst: Di, 02.02.2016 09:29
von Karolus
Hallo

Den Spaltenindex auf 1
den Zeilenindex auf 3

Re: Speichern unter Makro

Verfasst: Mi, 03.02.2016 11:03
von Jörg
Hallo,
so wie ich es sehe:

ändere:

Code: Alles auswählen

dialog.DisplayDirectory = ConvertToURL("D:\Daten\")
in

Code: Alles auswählen

dialog.DisplayDirectory = ConvertToURL("Hier Deinen Pfad angeben")
Gruß Jörg

Re: Speichern unter Makro

Verfasst: Mi, 03.02.2016 12:25
von nikki
tam-tam hat geschrieben:Danke, aber das geht leider nicht, der Pfad ist immer anders.... die Datei wird von mehreren Personen auf unterschiedlichen PC's genutzt.
C:\Users\Admin\Daten wäre zb mein Pfad, beim anderen C:\Xyz\Admin\Daten usw.
Ist ein wenig kompliziert das zu erklären.
eine Umgebungsvariable kann nicht benutzt werden ?

Re: Speichern unter Makro

Verfasst: Di, 09.02.2016 11:18
von nikki
Hallo,
tam-tam hat geschrieben:wenn ich das richtig verstanden hab, muss ich ja an jeden PC dran und da was ändern?!? Das geht leider nicht
falls Du damit die Umgebungsvariablen meinst, dann hast Du die verlinkte Seite offensichtlich nicht gelesen. Dort steht u. a., ich zitiere:

Windows stellt standardmäßig einige Umgebungsvariablen (Environmentvariablen) zur Verfügung. Diese Variablen können in Loginscripts und Batch-Programmen verwendet werden. Im vorliegenden Fall wäre dies %HOMEPATH%.

Beispiel:
  • - Tastenkombination Win+R (Run) drücken.
    - Beim Eingabefeld Öffnen %homepath% eingeben und Eingabetaste drücken, bzw. auf Schalter OK klicken.
    - Das aktuelle Benutzerverzeichnis des angemeldeten Benutzers wird angezeigt.

Re: Speichern unter Makro

Verfasst: Di, 09.02.2016 11:43
von Stephan
wenn ich das richtig verstanden hab
Nein, hast Du leider nicht
(wie schon "nikki" schreibt scheinst Du nicht einmal unter dem Link nachgelesen zu haben, denn dort steht quasi das glatte Gegenteil)

aber praktisch:

Es ist ungewöhnlich das Du hier die Pfade:

C:\Users\Admin\Daten und C:\Xyz\Admin\Daten

als Beispiel benennst denn das ist nicht der Windows-Default, denn dieser wäre quasi:

C:\Users\Admin\Daten und C:\Users\Xyz\Daten


Falls doch letzterer Fall vorläge wäre es einfach da dann Folgendes genügt:

Code: Alles auswählen

Sub Pfad_ausgeben()
  Msgbox Environ("USERPROFILE") & "\Daten"
End Sub


das würde unter Windows auf beliebigen PC immer liefern:

C:\Users\<Benutzername>\Daten


Falls hingegen Deine Pfadangaben zuträfen wäre das Ganze komplizierter und wie man es löst von der genaueren Situation abhängig.

Generell sparst Du Dir solcherlei Verrenkungen wenn Du die Makros plus Dokumentvorlagen gleich per Extension verteilst denn dann ist der Pfad jederzeit leicht über die Extension selbst ermittelbar unter Rückgriff auf:
http://www.openoffice.org/api/docs/comm ... geLocation

z.B.:

Code: Alles auswählen

aService = GetDefaultContext().getByName("/singletons/com.sun.star.deployment.PackageInformationProvider") 
verzeichnis = aService.getPackageLocation("org.joesch.mottco")
wobei "org.joesch.mottco" der Indentifier-String der Extension ist so wie er auch in der description.xml eingetragen ist:
https://wiki.openoffice.org/wiki/Docume ... ns/Example



Gruß
Stephan