CALC: als TXT automatisch speichern

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

Moderator: Moderatoren

MarketMaker
Beiträge: 2
Registriert: Di, 19.03.2013 19:24

CALC: als TXT automatisch speichern

Beitrag 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!)
hylli
*******
Beiträge: 1672
Registriert: Mi, 22.02.2006 19:37

Re: Makro automatisch ausführen

Beitrag 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 :)
Ein Dankeschön für eine Lösung tut nicht weh!
Wer eine Lösung selbst findet, sollte die für die Nachwelt auch posten!

Geschäftlich: LibreOffice 6.0.x ("Still") unter Windows 10 64bit
Privat: LibreOffice 6.0.x ("Still") unter Linux Mint 19.x Cinnamon 64bit
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: CALC: als TXT automatisch speichern

Beitrag 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?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
MarketMaker
Beiträge: 2
Registriert: Di, 19.03.2013 19:24

Re: CALC: als TXT automatisch speichern

Beitrag von MarketMaker »

Besten Dank, beim Dokument schließen funktioniert es.
Antworten