Macro von der Kommandozeile ausführen und Resultat speichern

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Macro von der Kommandozeile ausführen und Resultat speichern

Re: Macro von der Kommandozeile ausführen und Resultat speic

von Axel Richter » Mo, 07.02.2011 21:25

Hallo,

wie ich feststellen konnte, beherrscht OpenOffice die Microsoft Spreadsheet XML. Damit ist es einfacher als mit dem Manipulieren der content.xml eines ODS-Archives möglich, Workbooks mit Spreadsheets zu erstellen. Das sogar mit dem netten Nebeneffekt, dass Excel diese Dateien auch öffnen kann.

Beispieldatei anliegend. In der Datei ist *kein* ODS-Archiv, sondern reines XML. Wenn die Datei mit dem Typ .ods versehen wird, dann öffnet sie das System auch per Doppelklick mit OOo-Calc.
Referenz: http://msdn.microsoft.com/en-us/library ... 10%29.aspx.

viele Grüße

Axel
Dateianhänge
CalcExcel.xml.ods
(1.92 KiB) 110-mal heruntergeladen

Re: Macro von der Kommandozeile ausführen und Resultat speic

von rivella » Mo, 07.02.2011 14:12

@Axel
Vielen Dank! Ich hatte gestern vergessen zu erwähnen, dass ich auch die Datei script.xlb entsprechend modifiziert habe. Wenn ich dann den Aufruf über die Kommandozeile mache, bleibt OO einfach hängen. Eine Datei test.csv.ots wird nicht erzeugt.

Ich versuche jetzt, das Problem anders zu lösen; evtl. mit PHP. Die Bibliothek ods-php ist ein guter Ansatz, liefert mir aber einen out-of-memory Fehler.

Ich überlege mir etwas und berichte dann im Erfolgsfall :)

Bis dann
rivella

Re: Macro von der Kommandozeile ausführen und Resultat speic

von Axel Richter » Mo, 07.02.2011 08:07

Hallo rivella,

der Vollständigkeit wegen:
rivella hat geschrieben:Ich habe einfach im Verzeichnis /usr/lib/openoffice/basis-link/share/basic/Gimmicks/ die Datei CSVinsert.xba erstellt und dort den Makrocode aus der entsprechenden Windowsdatei eingefügt. Reicht das oder muss ich das Makro in OO noch irgendwo anmelden?
Nein, das reicht nicht.
1. Es gibt dort zunächst das Problem der Pfade. Bei mir (ubuntu) ist der Pfad nämlich /opt/openoffice.org/basis3.2/share/basic/Gimmicks oder /opt/openoffice.org3/basis-link/share/basic/Gimmicks.
2. Es gibt in den Library-Verzeichnissen noch je eine Datei script.xlb. Dort muss der Makroname, hier also CSVinsert, auch noch eingetragen werden. Meine sieht dann so aus:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE library:library PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "library.dtd">
<library:library xmlns:library="http://openoffice.org/2000/library" library:name="Gimmicks" library:readonly="false" library:passwordprotected="false">
<library:element library:name="GetTexts"/>
<library:element library:name="Userfields"/>
<library:element library:name="ChangeAllChars"/>
<library:element library:name="AutoText"/>
<library:element library:name="ReadDir"/>
<library:element library:name="CSVinsert"/>
</library:library>

viele Grüße

Axel

Re: Macro von der Kommandozeile ausführen und Resultat speic

von rivella » Mo, 07.02.2011 06:52

Karolus hat geschrieben:rivella will doch von odf nach csv wandeln, nicht umgekehrt !
Eben nicht ;) Ich wollte eine CSV Datei in ein OTS-Template einfügen.

Re: Macro von der Kommandozeile ausführen und Resultat speic

von Karolus » Mo, 07.02.2011 00:05

Hallo
@Axel
rivella will doch von odf nach csv wandeln, nicht umgekehrt !

@rivella
ich hab dazu http://sgdoqoweb.uqar.qc.ca/software/odf2csv/odf2csv gefunden, vielleicht ist da das richtige dabei.

Gruß Karo

Re: Macro von der Kommandozeile ausführen und Resultat speic

von Axel Richter » So, 06.02.2011 20:21

Hallo rivella,
Axel Richter hat geschrieben:wenn Du eine Software schreibst - oder findest -, welche Dir aus der CSV direkt das OOo-Calc-OTS-Archiv mit den entsprechenden XMLs usw. darin erstellt; im OpenDocument-Dateiformat eben.
http://sourceforge.net/apps/mediawiki/c ... =Main_Page
ungetestet.

Bitte Erfahrungen damit dann eventuell hier mitteilen.

viele Grüße

Axel

Re: Macro von der Kommandozeile ausführen und Resultat speic

von hol.sten » So, 06.02.2011 20:15

rivella hat geschrieben:Verflucht, so etwas hatte ich schon befürchtet :?
Wenn du OOo unter *nix ohne GUI betreiben willst, musst du entweder dennoch einen XServer bereit stellen oder dich an einer totally headless Installation versuchen: Und du musst mindestens einmal durch OOo's First Start Wizard oder den Parameter -nofirststartwizard verwenden. Aber den Parameter habe ich in dieser Diskussion zumindest einmal bereits gefunden.

Re: Macro von der Kommandozeile ausführen und Resultat speic

von rivella » So, 06.02.2011 19:54

@Alex
Verflucht, so etwas hatte ich schon befürchtet :?

Danke für Deine Hilfe. Falls ich doch noch eine Lösung finde, poste ich sie hier.

Bis dann
rivella

Re: Macro von der Kommandozeile ausführen und Resultat speic

von Axel Richter » So, 06.02.2011 19:39

Hallo rivella,
rivella hat geschrieben:Das kann ich nicht machen, weil OO auf einem Webserver läuft, ohne GUI.
*argh*
Sorry, das hatte ich nicht gelesen. Aber das wird nicht funktionieren. Irgendein X-System wird in jedem Fall benötigt, und wenn es eine VM ist. Siehe Diskussionen http://www.google.de/#q=linux+openoffice+without+X.

Ohne X kannst Du das, meiner Meinung nach, nur lösen, wenn Du eine Software schreibst - oder findest -, welche Dir aus der CSV direkt das OOo-Calc-OTS-Archiv mit den entsprechenden XMLs usw. darin erstellt; im OpenDocument-Dateiformat eben.

viele Grüße

Axel

Re: Macro von der Kommandozeile ausführen und Resultat speic

von rivella » So, 06.02.2011 19:15

Hallo Alex,

vielen Dank für Deine Hilfe.
Axel Richter hat geschrieben:1. Lass das -headless -nologo -nofirststartwizard -norestore erst Mal weg, damit Du ggf. Fehler angezeigt bekommst.
Das kann ich nicht machen, weil OO auf einem Webserver läuft, ohne GUI. Wie bekomme ich eine ensprechende Ausgabe auf Kommandozeilenebene?
Axel Richter hat geschrieben:2. Es gibt bei Dir eine Makro-Bibliothek "Gimmicks" und darin ein Modul "CSVinsert" mit dem Makro darin? Ruf Mal einfach nur soffice auf und dann dort Extras-Makros-Verwalten... und schau nach, ob Du das dort findest.
Ich habe einfach im Verzeichnis /usr/lib/openoffice/basis-link/share/basic/Gimmicks/ die Datei CSVinsert.xba erstellt und dort den Makrocode aus der entsprechenden Windowsdatei eingefügt. Reicht das oder muss ich das Makro in OO noch irgendwo anmelden? Bitte bedenke, dass ich OO _nur_ aud Kommandozeilenebene nutzen kann.
Axel Richter hat geschrieben:3. In Starbasic können Strings nicht durch einfache Anführungsstriche eingeschlossen werden. Der Makro-Aufruf muss also lauten:
"macro:///Gimmicks.CSVinsert.Ascii_2_CalcSheets(\"/temp/test/test.ots\")"
Ok.
Axel Richter hat geschrieben:4. Wenn es dann ers Mal klappt, wirst Du sehen, dass Dein Command-Aufruf nicht zum Ende kommt. Wie auch? Du startest im Makro Stardesktop ohne es zu beenden und er Nutzer hat aber auch kein Fenster, was er schließen könnte. Füge also am Ende des Makros noch

Code: Alles auswählen

Stardesktop.terminate()
ein.
Das habe ich jetzt gemacht. Danke.

Nachdem ich die Punkte 3 und 4 beachtet habe, bekomme ich im Verzeichnis /temp/test/ leider immer noch keine Datei temp.csv.ots erzeugt :(

Bis dann
rivella

Re: Macro von der Kommandozeile ausführen und Resultat speic

von Axel Richter » So, 06.02.2011 19:02

Hallo rivella,
rivella hat geschrieben:Der Aufruf erfolgte durch

Code: Alles auswählen

/usr/lib/openoffice/program/soffice -headless -nologo -nofirststartwizard -norestore -n "macro:///Gimmicks.CSVinsert.Ascii_2_CalcSheets('/temp/test/test.ots')"
1. Lass das -headless -nologo -nofirststartwizard -norestore erst Mal weg, damit Du ggf. Fehler angezeigt bekommst.

2. Es gibt bei Dir eine Makro-Bibliothek "Gimmicks" und darin ein Modul "CSVinsert" mit dem Makro darin? Ruf Mal einfach nur soffice auf und dann dort Extras-Makros-Verwalten... und schau nach, ob Du das dort findest.

3. In Starbasic können Strings nicht durch einfache Anführungsstriche eingeschlossen werden. Der Makro-Aufruf muss also lauten:
"macro:///Gimmicks.CSVinsert.Ascii_2_CalcSheets(\"/temp/test/test.ots\")"

4. Wenn es dann ers Mal klappt, wirst Du sehen, dass Dein Command-Aufruf nicht zum Ende kommt. Wie auch? Du startest im Makro Stardesktop ohne es zu beenden und er Nutzer hat aber auch kein Fenster, was er schließen könnte. Füge also am Ende des Makros noch

Code: Alles auswählen

Stardesktop.terminate()
ein.

viele Grüße

Axel

Re: Macro von der Kommandozeile ausführen und Resultat speic

von rivella » So, 06.02.2011 15:30

Ok, ich habe das Makro jetzt wie folgt geändert:

Code: Alles auswählen

Sub Ascii_2_CalcSheets (tabelle As String)
   ' tabelle = "/temp/test/test.ots" ' Das diente nur zum testen unter WIndows
   oDoc = StarDesktop.loadComponentFromURL(ConvertToUrl(tabelle), "_blank", 0, Array())
   csvfile = "/temp/test/temp.csv"
   ' oDoc = thisComponent
   oPlan = oDoc.getSheets().getByIndex(0)
   sURL = csvfile
   sURL = ConvertToURL ( sURL )
   sOrigem = ""
   sFiltro = "Text - txt - csv (StarCalc)"
   'sOpc = "9,34,0,1,1/1/2/1/3/2"
   sOpc = "9,34,76,1,"
   nModo = com.sun.star.sheet.SheetLinkMode.NORMAL
   oPlan.link(sURL, sOrigem, sFiltro, sOpc, nModo)
   oPlan.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
   url = ConvertToUrl(csvfile & ".ots")
   oDoc.StoreAsUrl(url,Array())  
End Sub 
Der Aufruf erfolgte durch

Code: Alles auswählen

/usr/lib/openoffice/program/soffice -headless -nologo -nofirststartwizard -norestore -n "macro:///Gimmicks.CSVinsert.Ascii_2_CalcSheets('/temp/test/test.ots')"
Unter Windows funktioniert es, wenn ich das Makro aus dem Makroeditor aufrufe, unter Linux von der Kommandozeile aus nicht :(

cu
rivella

Re: Macro von der Kommandozeile ausführen und Resultat speic

von rivella » So, 06.02.2011 14:57

komma4 hat geschrieben:Ein paar Anmerkungen:

* kopiere den Quelltext, keine XBA
* zum Testen mit MSGBOX den Parameter -headless weglassen
* kommst Du mit den Dateiendungen nicht etwas durcheinander?
1. Ich hab doch den Quelltext kopiert!?
2. "headless" kann ich nicht weglassen, weil OO bei mir doch auf dem Webserver läuft.
3. Nein :)
Stephan hat geschrieben:
Mit der Parameterübergane hast Du natürlich recht. Das kommt aber erst dann in das Makro, wenn es auch funktioniert.
und wann soll dieser Zustand eintreten?
Derzeitig verwendest Du jedenfalls einen falschen Aufruf und ich verstehe nicht wie dieser funktionieren soll:

Code: Alles auswählen

[...] "macro:///Gimmicks.CSVinsert.Ascii_2_CalcSheets" /tmp/test/test.ots
Wenn nun meine Vermutung das es sich bei diesem Ausdruck um den Versuch handelt einen Parameter ans Makro zu übergeben falsch ist, ist doch die Zeile noch längst nicht richtig denn sie ergibt keinen Sinn weil man meiner Ansicht nach ENTWEDER ein Makro starten kann ODER eine Vorlagendatei öffnen, aber doch nicht beides auf diese Art und Weise gleichzeitig - entscheide Dich also für Eines.
Ach so, ich bin davon ausgegangen, dass ich eine Tabellendatei öffnen und gleichzeitig ein Makro darauf loslassen kann.

Ich müsste jetzt also das Makro so umschreiben, dass ich es folgendermaßen aufrufe

Code: Alles auswählen

[...] "macro:///Gimmicks.CSVinsert.Ascii_2_CalcSheets("/tmp/test/test.ots")
Ich probiere das mal aus und melde mich dann wieder.

Vielen Dank
rivella

Re: Macro von der Kommandozeile ausführen und Resultat speic

von Stephan » So, 06.02.2011 13:47

Eine Messagebox kann ich doch bei einem Kommandozeilenaufruf gar nicht ausgeben?
deswegen schrieb ich:
"erstens eine message-box in Makro schreiben um festzustellen ob es überhaupt gestartet wird"

und das sollte doch wohl auch ohne das fehlende "s" (es muß "ins" heißen statt "in") zu verstehen sein und heißt:

schreibe irgendwo in das Makro (möglichst am Anfang) eine Zeile der Form:

Code: Alles auswählen

Msgbox "OK, gestartet"
um zu überprüfen ob das Makro überhaupt startet.
Mit der Parameterübergane hast Du natürlich recht. Das kommt aber erst dann in das Makro, wenn es auch funktioniert.
und wann soll dieser Zustand eintreten?
Derzeitig verwendest Du jedenfalls einen falschen Aufruf und ich verstehe nicht wie dieser funktionieren soll:

Code: Alles auswählen

[...] "macro:///Gimmicks.CSVinsert.Ascii_2_CalcSheets" /tmp/test/test.ots
Wenn nun meine Vermutung das es sich bei diesem Ausdruck um den Versuch handelt einen Parameter ans Makro zu übergeben falsch ist, ist doch die Zeile noch längst nicht richtig denn sie ergibt keinen Sinn weil man meiner Ansicht nach ENTWEDER ein Makro starten kann ODER eine Vorlagendatei öffnen, aber doch nicht beides auf diese Art und Weise gleichzeitig - entscheide Dich also für Eines.


Gruß
Stephan

Re: Macro von der Kommandozeile ausführen und Resultat speic

von komma4 » So, 06.02.2011 13:42

Ein paar Anmerkungen:

* kopiere den Quelltext, keine XBA
* zum Testen mit MSGBOX den Parameter -headless weglassen
* kommst Du mit den Dateiendungen nicht etwas durcheinander?

Nach oben