Seite 1 von 1

Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Mo 25. Aug 2014, 16:31
von lumnis
Hallo,
ich habe nun schon eine Weile gesucht, komme aber nicht weiter.

Anliegen:
Ich möchte Daten aus Calc in eine Textdatei mit einem bestimmten Dateiformat schreiben, damit diese von anderen Programmen verwendet werden kann.

Lösungsansatz:
Ein Macro, vorzugsweise in Python, das die Daten aus Calc nimmt und in eine Textdatei der entsprechenden Form schreibt. Die Bibliothek zum Schreiben der Datei soll ebenfalls in Python sein.

Umsetzung:
Eine (leere) python Datei wurde erzeugt, wird im LibreOffice Macro-Selektor angezeigt und kann auch mit "Ausführen" ausgeführt werden.

Problem:
Ich kann scheinbar nicht wie gewöhnlich normale Python calls verwenden:
1: Sobald ich für Testzwecke ein 'print "Testtext" ' einfüge, wird das Macro nicht mehr angezeigt.
2: Versuch, dies über ein importiertes Modul zu lösen, gibt eine Import Fehlermeldung.

LO Macro Datei - writeFile.py:

Code: Alles auswählen

import TextFileFormat
def writeFileTxt( ):
    """Write to a text file"""    	    	
    writeFileFormat
    return None
Modul zum eigentlichen Datei schreiben - TextFileFormat.py

Code: Alles auswählen

def writeFileFormat():
    print "Datenreihe 1 "

Re: Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Mo 25. Aug 2014, 18:09
von karolus
Hallo
Quelltext, insbesondere Pythonquelltext sollte man hier in

Code: Alles auswählen

[code=php]
tags[/code] reinschreiben.
1: Sobald ich für Testzwecke ein 'print "Testtext" ' einfüge, wird das Macro nicht mehr angezeigt.
LO arbeitet inzwischen mit Python3.3 - seit 3 ist `print` eine Function kein Statement, schreibe print( "irgendwas )

ansonsten: python ist nicht Java du musst nicht jeden Pipifax in eine extra Datei reinschreiben.
lumnis hat geschrieben:
LO Macro Datei - writeFile.py:

Code: Alles auswählen

import TextFileFormat
def writeFileTxt( ):
    """Write to a text file"""                
    writeFileFormat   # du möchtes writFileFormat() auch ausführen ()←Klammern 
    return None   # ist überflüssig das tut die Funktion auch ohne `return None` an der Stelle    
Modul zum eigentlichen Datei schreiben - TextFileFormat.py

Code: Alles auswählen

def writeFileFormat():
    print "Datenreihe 1 " # Hier fehlen die ( Klammern )   
an welches bestimmte Dateiformat hast du denn gedacht? und welche Daten möchtest du exportieren?

Karolus

Re: Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Mo 25. Aug 2014, 23:35
von lumnis
Hallo Karolus,
vielen Dank für Deine Kommentare und Anregungen.
karolus hat geschrieben:Hallo
Quelltext, insbesondere Pythonquelltext sollte man hier in

Code: Alles auswählen

[code=php]
tags[/code] reinschreiben.
Hab ich korrigiert, danke für den Hinweis.
1: Sobald ich für Testzwecke ein 'print "Testtext" ' einfüge, wird das Macro nicht mehr angezeigt.
LO arbeitet inzwischen mit Python3.3 - seit 3 ist `print` eine Function kein Statement, schreibe print( "irgendwas )
Danke. Hab ich testweise mal probiert.
ansonsten: python ist nicht Java du musst nicht jeden Pipifax in eine extra Datei reinschreiben.
Hatte ich zu Beginn auch nicht unbedingt vor. Das entstand aus der Tagsache, dass mit dem "print" das Macro nicht mehr in LO ausführbar war. Die Anpassungen ergaben aber auch keine Änderung. Sobald ich das print in die Macro Datei aufnehme, wird dieses Macro nicht mehr im Makro-Selektor angezeigt.
lumnis hat geschrieben:
LO Macro Datei - writeFile.py:

Code: Alles auswählen

import TextFileFormat
def writeFileTxt( ):
    """Write to a text file"""                
    writeFileFormat   # du möchtes writFileFormat() auch ausführen ()←Klammern 
 
Modul zum eigentlichen Datei schreiben - TextFileFormat.py

Code: Alles auswählen

def writeFileFormat():
    print "Datenreihe 1 " # Hier fehlen die ( Klammern )             
Also wie gesagt, wenn ich das Macro 1 (writeFile.py) ändere in

Code: Alles auswählen

import TextFileFormat
def writeFileTxt( ):
    print("writeFileTxt aufgerufen")
 
wird dieses Macro nicht mehr angezeigt und kann deshalb nicht mehr ausgeführt werden.

Daher die Frage:
Wie sieht ein Macro aus, mit dem ich direkt in eine Textdatei schreiben kann und womit ich das Dateiformat selbst bestimmen kann?
Karolus hat geschrieben: an welches bestimmte Dateiformat hast du denn gedacht? und welche Daten möchtest du exportieren?
Das Dateiformat ist epw und enthält Klimadaten. Es handelt sich dabei also hauptsächlich um Komma-separierte Zahlenreihen, mit Datum am Anfang.

Karolus[/quote]

Re: Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Di 26. Aug 2014, 12:26
von lumnis
Karolus,
Vielen Dank für Deine Bemerkungen und damit den Weg zur Lösung.
Es funktioniert jetzt direkt in der Python Datei.

Danke.

Re: Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Di 26. Aug 2014, 13:44
von karolus
Hallo
Auch wenn du jetzt eine funktionierende Lösung hast - kannst du den derzeitigen Code posten -
Das CodeBeispiel kann zukünftigen Fragestellern helfen, und die Kritik (die du vmtl. von mir bekommst 8-) ) schadet nicht!

Karolus

Re: Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Di 26. Aug 2014, 13:55
von lumnis
Beispielcode zum schreiben in eine Textdatei

Code: Alles auswählen

def writeTextFile():
    file_object = open('outputtextfile.txt','w')
    file_object.write("Test Text from TextfileWriter")
    file_object.close()
Diesen Code in eine Datei mit Namen "textFileWriter.py" speichern und in das LO Nutzerverzeichnis,
unter Linux z.B. (openSUSE) /home/username/.config/libreoffice/4-suse/user/Scripts/python/ kopieren.

Nach dem Neustart von LibreOffice steht das neue Makro zum Ausführen bereit.

Re: Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Di 26. Aug 2014, 15:15
von karolus
Hallo

Das ist soweit ok, im allgemeinen wird dafür folgendes empfohlen:

Code: Alles auswählen

def writeTextFile():
    with open('outputtextfile.txt','w') as file_object:
        file_object.write("Test Text from TextfileWriter")
 
damit spart man das explizite Schliessen mit ...close() was ottoNormalProgrammierer eh gerne mal vergisst, und es wird bestmöglich garantiert das `file_object` in jedem Fall ( Erdbeben, Kometeneinschlag, Stromausfall ;-) ) geschlossen wird.
Ausserdem solltest du dir grundsätzlich 4 Leerzeichen pro Einrückungsebene angewöhnen (bzw. deinem Texteditor ) -
dein gezeigter Code hat anscheinend nur 3 Leerzeichen anzubieten.

Karolus

Re: Macro : Python : Daten aus Calc in Textdatei schreiben

Verfasst: Mi 27. Aug 2014, 16:10
von lumnis
karolus hat geschrieben:Hallo

Das ist soweit ok, im allgemeinen wird dafür folgendes empfohlen:

Code: Alles auswählen

def writeTextFile():
    with open('outputtextfile.txt','w') as file_object:
        file_object.write("Test Text from TextfileWriter")
 
damit spart man das explizite Schliessen mit ...close() was ottoNormalProgrammierer eh gerne mal vergisst, und es wird bestmöglich garantiert das `file_object` in jedem Fall ( Erdbeben, Kometeneinschlag, Stromausfall ;-) ) geschlossen wird.
Vielen Dank für den Hinweis. Ich hatte die Lösung aus einem Buch und die hat es erstmal für mich getan.
karolus hat geschrieben: Ausserdem solltest du dir grundsätzlich 4 Leerzeichen pro Einrückungsebene angewöhnen (bzw. deinem Texteditor ) -
dein gezeigter Code hat anscheinend nur 3 Leerzeichen anzubieten.
Karolus
Ja, mein Editor (jedit / kate) habe ich noch nicht wieder konfiguriert gehabt, was der Grund für einen Teil der Probleme war. Beim Einfügen war noch der Tab drin, so kamen die 3 Leerzeichen im gezeigten Code. Für die weitere Entwicklung folge ich deiner Empfehlung.

Vielen Dank nochmal für Deine Unterstützung durch die vielen hilfreichen Hinweise.