Hallo. Ich habe gesehen, dass es schon das eine oder andere dazu gab. Allerdings wurden da immer neue Excel-Dateien angelegt.
Ich möchte folgendes tun:
Ich habe ein Programm, aus dem ich mit Hilfe verschiedener Python-Skripte Daten auslese und momentan noch in eine txt-Datei schreibe. Schöner wäre es diese in eine bestehende EXCEL-Datei zu schreiben.
Beispiel:
Die EXCEL Datei liegt in "C:\meineDaten\Excel\Auswertung.xls.
In der Excel gibt es ein Tabellenblatt "Werte"
In diesem Tabellenblatt will ich meine Daten: "Name" "wert" ab Zeile2 in die Spalten A und B eintragen also so
Spalte A SpalteB
Name1 Wert1
Name2 Wert2
......
Wie realisiere ich sowas?
Danke schonmal für die Hilfe.
Gruß
Thorsten
Daten eines Skriptes in EXCEL exportieren
Vielleicht hilft das:
Das ist nur, was ich auf die schnelle noch finden konnte, habs bissl an
dein Beispiel angepasst. Genauer gehts auf die schnelle aber net^^
Code: Alles auswählen
from win32com.client import Dispatch
xlApp = Dispatch("Excel.Application")
xlApp.Visible = 1
xlApp.Workbooks.Add()
xlApp.ActiveSheet.Cells(2,1).Value = 'Name'
xlApp.ActiveSheet.Cells(3,1).Value = 'Name'
xlApp.ActiveSheet.Cells(2,2).Value = 'Name1'
xlApp.ActiveSheet.Cells(3,2).Value = 'Name2'
xlApp.ActiveWorkbook.Close(SaveChanges=1)
xlApp.Quit()
xlApp.Visible = 0
dein Beispiel angepasst. Genauer gehts auf die schnelle aber net^^
Ok soweit so gut. Jetzt ist noch die Frage wie ich eine bestimmte Datei aufrufe und wie ich ein bestimmtes Tabellenblatt aufrufe.
Dann noch eine Frage: "win32com.client" ist das eine Python Bibliothek oder muss ich dazu noch was zusätzliches installieren? Ich meine in einem anderen Beitrag stand da, dass man dazu noch ein Programm installieren muss. Bin mir aber nicht ganz sicher.
Gibt es zu diesen Befehlen in für win32com.client eigentlich eine Dokumenation? Also was es für Befehle gibt und was die genau machen?
Danke aber schonmal für den Beispielcode
Gruß
Thorsten
Dann noch eine Frage: "win32com.client" ist das eine Python Bibliothek oder muss ich dazu noch was zusätzliches installieren? Ich meine in einem anderen Beitrag stand da, dass man dazu noch ein Programm installieren muss. Bin mir aber nicht ganz sicher.
Gibt es zu diesen Befehlen in für win32com.client eigentlich eine Dokumenation? Also was es für Befehle gibt und was die genau machen?
Danke aber schonmal für den Beispielcode
Gruß
Thorsten
Bezugnehmend auf das vorherige Beispiel:Thorsten hat geschrieben:Ok soweit so gut. Jetzt ist noch die Frage wie ich eine bestimmte Datei aufrufe und wie ich ein bestimmtes Tabellenblatt aufrufe.
Code: Alles auswählen
xlApp.Workbooks.Open("C:\meineDaten\Excel\Auswertung.xls")
xlApp.ActiveWorkbook.Worksheets("Werte").Activate()
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Thorsten!Thorsten hat geschrieben:Die EXCEL Datei liegt in "C:\meineDaten\Excel\Auswertung.xls.
In der Excel gibt es ein Tabellenblatt "Werte"
In diesem Tabellenblatt will ich meine Daten: "Name" "wert" ab Zeile2 in die Spalten A und B eintragen also so
[...]
Wie realisiere ich sowas?
Diese Antwort gebe ich wahrscheinlich Allen.
Öffne Excel. Zeichne ein Makro auf, in dem du die Datei öffnest, befüllst und dann wieder schließt. Analysiere dieses VBA-Makro und versuche daraus ein Python-Skript zu erstellen.
So musst du nur noch die Syntax an Python anpassen und zuerst mit ``Dispatch("Excel.Application")`` zum Excel-Objekt kommen.
Bis alles läuft "Visible = 1" und sobald es funktioniert, kannst du das alles im Hintergrund laufen lassen.
WICHTIG!!! Zerstöre nachher das Excel-Objekt mit "del", sonst schwirrt es weiter im Speicher herum.
Hier findest du ein schönes Beispiel von mir: http://www.python-forum.de/post-32375.html#32375
Wenn du beim Übersetzen des VBA-Makros in ein Python-Skript hilfe brauchst, dann helfen wir gerne weiter.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Thorsten!Thorsten hat geschrieben:"win32com.client" ist das eine Python Bibliothek oder muss ich dazu noch was zusätzliches installieren?
pywin32 bekommst du hier: http://sourceforge.net/project/showfile ... p_id=78018
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hallo. Danke für die schnelle und kompetente Hilfe. Ich werde versuchen das heute noch zu testen. Jetzt habe ich aber noch zwei Fragen:
1.Ich arbeite zwangsweise noch mit Python 2.1. Dafür habe ich aber keine pywin32 Version gefunden. Das fängt erst bei 2.2 an. Kann ich die dann trotzdem verwenden?
2. Ist das ein Open Source Programm oder einfach eine Software die kostenlos erhältlich ist?
Gruß
Thorsten
1.Ich arbeite zwangsweise noch mit Python 2.1. Dafür habe ich aber keine pywin32 Version gefunden. Das fängt erst bei 2.2 an. Kann ich die dann trotzdem verwenden?
2. Ist das ein Open Source Programm oder einfach eine Software die kostenlos erhältlich ist?
Gruß
Thorsten
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Thorsten!Thorsten hat geschrieben:1.Ich arbeite zwangsweise noch mit Python 2.1.
[...]
2. Ist das ein Open Source Programm oder einfach eine Software die kostenlos erhältlich ist?
Dann bleibt dir nichts anderes übrig, als auf ein neueres Python upzudaten. Alles andere wird wohl mehr Probleme bereiten als diese zu lösen.
Du musst ja nicht einmal updaten. Du kannst mehrere Python-Versionen nebeneinander installieren. Das geht mit der Installations-Option "REMOVE=Extensions". Siehe auch hier: http://www.python-forum.de/post-19119.html#19119
und hier: http://www.python.org/download/releases/2.4/msi/
http://sourceforge.net/project/showfile ... e_id=79063
Die Zip-Dateien enthalten den Quellcode.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
So einfach ist das leider nicht. Die Python 2.1 ist in dem Programm integriert in dem ich auch die Skripte schreibe und ausführe. Ich glaube da muss ich mich dann so oder so mal informieren, wie ich das pywin32 da in die Software mit integrieren muss, damit das funktioniert.
Gruß
Thorsten
Gruß
Thorsten
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Thorsten!Thorsten hat geschrieben:So einfach ist das leider nicht. Die Python 2.1 ist in dem Programm integriert in dem ich auch die Skripte schreibe und ausführe.
Das ist auch kein großes Problem. Installiere dir das neueste Python und das dazu passende pywin32. Vom Programm aus, das nur Python 2.1 integriert hat, startest du dein Programm als eigenen Prozess.
Du kannst dir alle Daten die du z.B. vom eingeschränkten Programm aus exportieren möchtest, mit Pickle in eine Datei schreiben und den Pfad, zur Datei mit den Einstellungen, als Kommandozeilenparameter an das Python 2.4-Programm übergeben. Pickle gab es auch schon im 2.1'er Python.
Du kannst aber auch das Modul "subprocess" und "pickle" verwenden um Daten direkt über STDIN und STDOUT von einem Prozess zum nächsten zu transportieren. Siehe: http://www.python-forum.de/topic-4941.html
Ich glaube, "subprocess" lässt sich auch unter Python 2.1 zum Laufen bringen. Diese Frage kann "jens" sicher beantworten. Der hat sich, glaube ich, schon mal damit befasst.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
So könntest du Daten von einem Prozess zum nächsten weiter geben.
sender.py:
empfaenger.py:
mfg
Gerold
sender.py:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
# sender.py
# Dieses Programm kann mit dem alten Python 2.1 ausgeführt werden
import os
import pickle
TMP_FILENAME = "datenaustausch.tmp"
# Daten, die übergeben werden sollen
data = (
{"vorname": "Gerold", "nachname": "Penz"},
{"vorname": "Bernhard", "nachname": "Mustermann"},
)
# Temporäre Datei erstellen
tmpfile = open(TMP_FILENAME, "wb")
# Daten in temp. Datei speichern und Datei schließen
p = pickle.dump(data, tmpfile)
tmpfile.close()
# Empfängerprogramm (Python 2.4) aufrufen
os.system("empfaenger.py " + TMP_FILENAME)
# Temporäre Datei löschen
os.remove(TMP_FILENAME)
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
# empfaenger.py
# Dieses Programm wird mit Python 2.4 ausgeführt...
import sys
import pickle
# Prüfe ob der Pfad zur temp. Datei übergeben wurde
assert(len(sys.argv) == 2)
# Datei öffnen, Daten laden und wieder schließen
tmpfile = open(sys.argv[1], "rb")
data = pickle.load(tmpfile)
tmpfile.close()
print data
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hallo gerold. Danke für deine große Unterstützung.
Ich werde mal sehen ob ich das so hinbekomme. Wenn nicht könnte ich noch versuchen die Daten in eine CSV-Datei zu speichern wobei ich da noch interessant wäre ob man da vorher den Datentyp festlegen kann. Bei meinem Versuch wurden Zahlen als "Standard" interpretiert und können ohne die Zellen in EXCEL nochmal um zu formatieren nicht für Berechnungen benutzt werden.
Gruß
Thorsten
Ich werde mal sehen ob ich das so hinbekomme. Wenn nicht könnte ich noch versuchen die Daten in eine CSV-Datei zu speichern wobei ich da noch interessant wäre ob man da vorher den Datentyp festlegen kann. Bei meinem Versuch wurden Zahlen als "Standard" interpretiert und können ohne die Zellen in EXCEL nochmal um zu formatieren nicht für Berechnungen benutzt werden.
Gruß
Thorsten