Seite 1 von 1

CALC: als TXT automatisch speichern

Verfasst: Di, 19.03.2013 19:54
von MarketMaker
Hallo zusammen

Ich habe auf einem Tabellenblatt Daten von anderen Tabellenblättern zusammengefasst.

Dieses Tabellenblatt möchte Ich als TXT Datei abspeichern.

Der Speicherdialog umfasst einige Klicks die Ich mir ersparen möchte, und suche deshalb eine automatische Lösung.

Habe keine Ahnung wie Ich das anstellen soll, weil Ich das Programm erst seit kurzem benutze.

Habe jetzt mal die Funktion „Makro aufzeichnen“ benutzt.

Folgendes Makro wurde erzeugt:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main

End Sub


sub MMKurse
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = "file:///E:/MMKurse.txt"
args1(1).Name = "FilterName"
args1(1).Value = "Text - txt - csv (StarCalc)"
args1(2).Name = "FilterOptions"
args1(2).Value = "0,0,ANSI,1"

dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())


end sub
Für Programmcode bitte die [​code]…[​/code]–Tags verwenden!—lorbass, Mod

Ich kann diese Makro jetzt suchen und Ausführen lassen, es funktioniert.

Als zweites wollte Ich dieses Makro einer Aktion zuordnen und habe unter „Programmende“ dieses Makro eingetragen.

Wenn Ich das Programm schließe wird dieses Makro aber nicht ausgeführt.
Zwei Dinge sind mir aufgefallen:

Wenn man das Makro per Hand auswählt muss man darauf achten, das auch die richtige Tabelle angezeigt wird, sonst wird eine andere Tabelle als TXT Datei abgespeichert.

Wenn Ich das Makro per Hand ausführen will kommt vorher eine Meldung JRE Laufzeitumgebung wird benötigt, aber per Hand funktioniert es dann trotzdem.

Mir wäre eigentlich egal wie das Makro ausgeführt wird, entweder mit dem Programmende,
oder vielleicht eine Art Button den man anklickt.

Könntet Ihr mir helfen?

Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst (aussagekräftigen Betreff wählen!)

Re: Makro automatisch ausführen

Verfasst: Di, 19.03.2013 20:06
von hylli
Hi,

ich hatte hier ein ähnliches Problem. Teil 1 des Makros (siehe unten 1. - 4.) habe ich per Aufzeichnung erstellt. Der letzte Teil stammt aus dem Forum.

Das Makro habe ich dann einer Schaltfläche und dem Ereignis "Aktion ausführen" zugeordnet:

Code: Alles auswählen

REM  *****  BASIC  *****


sub Main
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Nr"
args1(0).Value = 7

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$Onlinebanking.$A$1:$V$200"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 8	

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$1"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVDNT"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args6())

rem ------------- Speichern als CSV --------------

Dim myProps(1) as New com.sun.star.beans.PropertyValue
sPath="/home/marco/Dokumente/Onlinebanking/Lastschtriftvorlagen.csv"
sUrl=ConvertToUrl (sPath)
myProps(0).Name = "FilterName"
myProps(0).Value ="Text - txt - csv (StarCalc)"
myProps(1).Name="FilterOptions"
myProps(1).Value ="59/9,34,33,1,1/1/2/1" 'string mit den Optionen
myDoc = thisComponent
myDoc.storeAsUrl(sUrl,myProps())
End Sub
Das Makro führt im Wesentlichen folgende Aktionen aus:
1. Auf Tabelle 7 wechseln
2. Bereich A1:V200 markieren und in die Zwischenablage kopieren
3. Auf Tabelle 8 auf Zelle A1 wechseln
4. Über Inhalte einfügen -> ohne Formeln, die Zwischenablage einfügen
5. Tabelle 8 (die noch aktuell ist) als CSV-Datei speichern, mit entsprechenden Formatangaben.

Vielleicht kannst Du das Makro für Deine Zwecke kürzen.

Hylli :)

Re: CALC: als TXT automatisch speichern

Verfasst: Mi, 20.03.2013 04:38
von komma4
MarketMaker hat geschrieben:Als zweites wollte Ich dieses Makro einer Aktion zuordnen und habe unter „Programmende“ dieses Makro eingetragen.
Ich nehme an, dass bei "Programmende" (=Beenden von OOo) die Datei bereits geschlossen ist.
Wähle als Ereignis "Dokument wird geschlossen" - klappt es dann?

Re: CALC: als TXT automatisch speichern

Verfasst: Mi, 20.03.2013 18:49
von MarketMaker
Besten Dank, beim Dokument schließen funktioniert es.