Seite 1 von 1
Macro ändern
Verfasst: Di, 11.10.2005 16:00
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.
Verfasst: Di, 11.10.2005 16:42
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
Verfasst: Di, 11.10.2005 19:24
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?
Verfasst: Di, 11.10.2005 20:12
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
Verfasst: Di, 11.10.2005 21:48
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.
Verfasst: Mi, 12.10.2005 07:53
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:
jetzt wird das Dokument auch geschlossen. Und das ist die sauberere Lösung, als das "Schliessen" Kreuz.
Viele Grüße
Thomas
Verfasst: Mi, 12.10.2005 09:36
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
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?
Verfasst: Mi, 12.10.2005 11:09
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

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
Verfasst: Mi, 12.10.2005 13:24
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.