Speichern unter Makro

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

BritzFox
Beiträge: 9
Registriert: So, 20.12.2015 10:22

Speichern unter Makro

Beitrag 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 ?
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Speichern unter Makro

Beitrag 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
BritzFox
Beiträge: 9
Registriert: So, 20.12.2015 10:22

Re: Speichern unter Makro

Beitrag von BritzFox »

Supi, das funktioniert...
Danke.
Karolus
********
Beiträge: 7440
Registriert: Mo, 02.01.2006 19:48

Re: Speichern unter Makro

Beitrag von Karolus »

Hallo

Den Spaltenindex auf 1
den Zeilenindex auf 3
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO7.6.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
Jörg
*****
Beiträge: 392
Registriert: Mo, 21.10.2013 12:05

Re: Speichern unter Makro

Beitrag 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
Gruß Jörg

Win 10 Pro AOO 4.1.15
nikki
******
Beiträge: 787
Registriert: Do, 05.03.2015 10:42

Re: Speichern unter Makro

Beitrag 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 ?
Gruß

---------------------------------------------------------
Win.10 Prof. 64-bit, AOO 4.1.7, LO 6.3.4 (x64)
nikki
******
Beiträge: 787
Registriert: Do, 05.03.2015 10:42

Re: Speichern unter Makro

Beitrag 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.
Gruß

---------------------------------------------------------
Win.10 Prof. 64-bit, AOO 4.1.7, LO 6.3.4 (x64)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Speichern unter Makro

Beitrag 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
Antworten