🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Macro : Python : Daten aus Calc in Textdatei schreiben

Alles zur Programmierung im LibreOffice.
Antworten
lumnis
Beiträge: 12
Registriert: Mo 25. Aug 2014, 16:00

Macro : Python : Daten aus Calc in Textdatei schreiben

Beitrag von lumnis » Mo 25. Aug 2014, 16:31

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 "
Zuletzt geändert von lumnis am Mo 25. Aug 2014, 22:56, insgesamt 1-mal geändert.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

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

Beitrag von karolus » Mo 25. Aug 2014, 18:09

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
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

lumnis
Beiträge: 12
Registriert: Mo 25. Aug 2014, 16:00

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

Beitrag von lumnis » Mo 25. Aug 2014, 23:35

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]

lumnis
Beiträge: 12
Registriert: Mo 25. Aug 2014, 16:00

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

Beitrag von lumnis » Di 26. Aug 2014, 12:26

Karolus,
Vielen Dank für Deine Bemerkungen und damit den Weg zur Lösung.
Es funktioniert jetzt direkt in der Python Datei.

Danke.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

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

Beitrag von karolus » Di 26. Aug 2014, 13:44

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
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

lumnis
Beiträge: 12
Registriert: Mo 25. Aug 2014, 16:00

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

Beitrag von lumnis » Di 26. Aug 2014, 13:55

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.
Zuletzt geändert von lumnis am Mi 27. Aug 2014, 16:00, insgesamt 1-mal geändert.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

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

Beitrag von karolus » Di 26. Aug 2014, 15:15

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
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

lumnis
Beiträge: 12
Registriert: Mo 25. Aug 2014, 16:00

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

Beitrag von lumnis » Mi 27. Aug 2014, 16:10

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.


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten