Macro ändern

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

Moderator: Moderatoren

Benutzeravatar
teakay
***
Beiträge: 82
Registriert: Mi, 28.09.2005 08:47
Wohnort: Somewhere over the Rainbow.

Macro ändern

Beitrag von teakay »

Da ich keine Ahnung habe von Macro Programmierung hoffe ich das ihr mir weiter helfen könnt.

Ich habe beim durchstöbern von ooowiki folgendes Macro gefunden.

Code: Alles auswählen

sub save
  oDoc=thisComponent
  Sheet = oDoc.Sheets(0) [erstes Arbeitsblatt]
  Cell = Sheet.getCellByPosition(0, 0)  [Zelle A1]
  Filename = Cell.String
#  Path = "file:///data/kunden/rechnungen" [Pfad anpassen bei linux]
#  Path = "file:///E:/daten/kunden/rechnungen" [Pfad anpassen bei Windows] 
  dim document   as object
  dim dispatcher as object

  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  dim args1(1) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "URL"
  args1(0).Value = Path &  Filename & ".sxc"
  args1(1).Name = "FilterName"
  args1(1).Value = "StarOffice XML (Calc)"

  dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
end sub
Dieses Macro soll einer Datei automatisch einen Namen zuweisen. Irgendwie funzt das aber nett mit OO 1.9.130

hier ist nochmal der link zu diesem ooowiki beitrag.
http://www.ooowiki.de/FeldinhaltAlsDate ... rieCalc%29

und außerdem hätte ich gerne das der Dateiname sich aus den Zellen A12 und I6 zusammensetzt.
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Also im Prinzip funktioniert es schon, wahrscheinlich kommen die Fehler von den zusätzlich Hinweise.
Und bei der Pfadangabe fehlt ein Slash.

So sollte es klappen:
Die Pfade entsprechend anpassen.

Code: Alles auswählen

sub save
  oDoc=thisComponent
  Sheet = oDoc.Sheets(0) 
  Cell = Sheet.getCellByPosition(0, 0) 
  Filename = Cell.String
'  Path = "file:///data/kunden/rechnungen" 
' [Pfad anpassen bei linux]
  Path = "file:///F:/arbeit"
  dim document   as object
  dim dispatcher as object

  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

  dim args1(1) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "URL"
  args1(0).Value = Path &  Filename & ".sxc"
  args1(1).Name = "FilterName"
  args1(1).Value = "StarOffice XML (Calc)"

  dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
end sub
Kürzer und sauberer geht es ohne Dispatcher:

Code: Alles auswählen

sub save2
  oDoc=thisComponent
  Sheet = oDoc.Sheets(0) 
  Cell = Sheet.getCellByPosition(0, 0) 
  Filename = Cell.String
'  Path = "file:///data/kunden/rechnungen/" 
' [Pfad anpassen bei linux]
  Path = "file:///F:/arbeit/"
  dim args1(0) as new com.sun.star.beans.PropertyValue
  args1(0).Name = "FilterName"
  args1(0).Value = "StarOffice XML (Calc)"
  odoc.storeasurl(Path  &  Filename & ".sxc",args1())
end sub

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Benutzeravatar
teakay
***
Beiträge: 82
Registriert: Mi, 28.09.2005 08:47
Wohnort: Somewhere over the Rainbow.

Beitrag von teakay »

Tut mir leid aber irgendwie funzt es nicht. Ich habe mir den Code mal angesehen und konnte auch nicht erkennen wie der Name aus den Zellen A12 und I6 ermittelt wird. Ich weiß, ich habe gesagt das ich von Macro keine Ahnung habe, ich habe aber vor Jahren mal ein wenig mit Turbo Pascal 6.0 herumgespielt (gute alte DOS-Zeit *in Erinnerung schwelg*), daher weiß ich noch ganz wenig.

Also hier nochmal die Vorgaben.
1. Der Dateiname soll aus den Zellen A12 und I6 zusammengesetzt werden.
2. Ich benutze WinXP und der Speicherpfad ist C:\Rechnungen
3. Es soll im OASIS Format gespeichert werden kurz gesagt *.ods

Ich hoffe ihr könnt mir noch weiter helfen.

p.s.: Was ist Dispatcher?
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey teakay,
p.s.: Was ist Dispatcher?
Der Dispatcher ist eine art "Helferlein" (...Daniel Düsentrieb.!) , also eine spezielle Konstruktion, Makrobefehlsstrukturen recht "einfach" darzustellen. Der Makrorecorder erzeugt nur "Dispatcher-Code", der ist aber schwer lesbar und für Laien kaum interpretierbar. Auch geht nicht alles und Dispatcher-Commandos sind "deprecated", können sich also in zukünftigen Versionen entweder komplett ändern oder auch wegfallen.

Gut, soviel dazu.

Nun hast du doch eine gute Augabenbeschreibung geliefert, arbeite es einfach ab - Punkt für punkt, im normalen Basic-Code.

Code: Alles auswählen

sub speichern_nachZellenInhalt
  osheet = ThisComponent.sheets(0)   'erstes Tabellenblatt
  oZelle1 = oSheet.getCellRangeByName("A12")
  oZelle2 =oSheet.getCellRangeByName("I6")
REM so, jetzt hast du die beiden Zellen. In beiden steht hoffentlichText?
REM jetzt verketten wir die beiden Inhalte mit einem Unterstrich 
REM dazwiischen
   sDateiname = oZelle1.getString() & "_" & oZelle2-getString() & ".ods"
REm jetzt erzeugen wir die URL in Basic-Schreibweise
   sURL = "file:///C:/Windows/" & sDateiname
REM  jetzt speichern wir die Datei. Dazu werden zuerst ein Array mit 
REM Parametern erzeugt, das aber leer sein kann:
   dim Arg() as new com.sun.star.beans.PropertyValue
REM und jetzt speichern:
    ThisComponent.storeAsURL(sURL, Arg())
end sub
So sollte es eigentlich funktionieren (habs nicht getestet).

Viele grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
teakay
***
Beiträge: 82
Registriert: Mi, 28.09.2005 08:47
Wohnort: Somewhere over the Rainbow.

Beitrag von teakay »

Ich danke für die Hilfe aber irgendwie schient das nicht zu Funktionieren. Sobald ich auf das X oben rechts fürs beenden klicke fragt er mich immer noch nach einem Dateinamen. Obwohl ich auf EXTRAS/ANPASSEN/EREIGNISSE gegangen bin und dieses Macro mit "Programmende" verknüpft habe. Ich glaube ich muß dieses unterfangen aufgeben.

Ich danke für eure Hilfe.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey teakay,
Obwohl ich auf EXTRAS/ANPASSEN/EREIGNISSE gegangen bin und dieses Macro mit "Programmende" verknüpft habe.
Na, das hättest du gleich sagen sollen. Wenn du auf das Schließen Kreuz drückst, wird zuerst überprüft, ob die Datei schon eine URL besitzt - dann erst werden weiter Aktionen gestartet - also beispielsweise verknüpfte Makros.

Dann leg dir doch einfach einen eigenen Buton an (Extras - Anpassen....) und verknüpfe das Makro damit. Dann kannst du noch eine letzte Zeile hinzufügen:

Code: Alles auswählen

thisComponent.close(true)
jetzt wird das Dokument auch geschlossen. Und das ist die sauberere Lösung, als das "Schliessen" Kreuz.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
teakay
***
Beiträge: 82
Registriert: Mi, 28.09.2005 08:47
Wohnort: Somewhere over the Rainbow.

Beitrag von teakay »

Fettes Merci für Deine Tipps.

Ich habe jetzt einfach einen Button in die Vorlage eingefügt und das Macro damit Verknüpft.
Leider war in Deinem Code ein klitze-kleiner Fehler, den ich aber glücklicherweise erkannt habe. Vielleicht kommt ja jetzt doch noch meine Begabung fürs Programmieren zum Vorschein. :-)

In Deinem Code hast du das geschrieben.

Code: Alles auswählen

sDateiname = oZelle1.getString() & "_" & oZelle2-getString() & ".ods"
der Fehler steckt in

Code: Alles auswählen

"& oZelle2-getString() &"
Du hast ein Minus anstatt eines Punktes gesetzt.

jetzt sieht es so aus.

Code: Alles auswählen

sDateiname = oZelle1.getString() & "_" & oZelle2.getString() & ".ods"
Du hast in einem meiner anderen Themen von einem Buch geschrieben das Du geschrieben hast. Ist es den auch für absolute Laien geeignet und wann wird es denn möglicherweise Veröffentlicht?
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey teakay,
der Fehler steckt in ... Du hast ein Minus anstatt eines Punktes gesetzt.
Ich könnte ja jetzt behaupten - absichtlich eingebaut, um zu testen, wie die Aufmerksamkeit ist. Wäre aber falsch.
Ist einfach beim schnellen Schreiben passiert - und du hast den Fehler richtigerweise behoben :wink: Da wächst doch ein Programmierer heran.

Zum Buch:
Ja, das ist auch für Laien geeignet - mit ein bischen Erfahrung. Ist ein Lehr - und Nachschlagewerk mit vielen Beispielen. Kannst du anschauen:
http://www.ooodev.org/index.php?ziel=s03&rm=r00 - das Basic-Buch eben.
Tia, mit der Veröffentlichung. Fertig war es im April - jetzt wartet der Verla noch auf die Final 2.0. Aktuell ist der Erscheinungstermin jetzt im November. Solange musst du noch Geduld haben.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Benutzeravatar
teakay
***
Beiträge: 82
Registriert: Mi, 28.09.2005 08:47
Wohnort: Somewhere over the Rainbow.

Beitrag von teakay »

Na mal sehen was die Finanzen dann sagen. Das Datenbanken Buch von Dir könnte für mich vielleicht auch von interesse sein.
Antworten