Hallo
Bin gerade dabei eine Messroutine in Python zu schreiben. Da die Messwerte später (ist Vorgabe) in Excel ausgewertet werden sollen, hab ich mir überlegt die Messwerte direkt in Excel zu schreiben. Hier mal ein Auschnitt. DAs funktioniert auch. Nur jetzt habe ich eine Messung mit 5000 Messwerten. Das würde sehr lange dauern. Jetzt meine Überlegung. Die Daten erst in eine CSV-Datei schreiben und zum schluss bevor mein PythonSkript zu Ende ist automatisch die CSV-Datei in Word zu importieren. Ist dieser Gedankengang machbar und wie müsste ich an die Sache ran gehen. Wie man Werte in eine CSV-DAtei schreibt weiß ich. Mir würde nur der Import-Befehl nach Excel fehlen ?? Jemand ein Vorschlag ?
import win32com
import win32com.client
from win32com.client import Dispatch
.....
.....
.....
.....
xlApp = Dispatch("Excel.Application")
xlApp.Workbooks.Open("C:\TUEM3.xls")
xlApp.Visible = 0
n = 1
while(m<len(fListTraceData))
for j, content in enumerate([m, float(fListTraceData[m]), float(fFrequency)]):
xlApp.ActiveWorkbook.Sheets("SpuriousChain2RS").Cells(n, j+1).Value = content
m += 1
CSV Datei in Excel inportieren
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
mal ins blaue geraten:
Einfach Excel mit dem Befehl:
excel meine_csv_datei.csv
aufrufen? Den Aufruf kann du mit dem subprocess-Modul machen.
Gruß, noisefloor
mal ins blaue geraten:
Einfach Excel mit dem Befehl:
excel meine_csv_datei.csv
aufrufen? Den Aufruf kann du mit dem subprocess-Modul machen.
Gruß, noisefloor
kann mir jemand ein konkretes Beispiel geben. Zum Beispiel die Messwerte sind unter messwerte.csv gespeichert und ich möcht sie unter C:\Messauswertung.xls importieren. weil mit dem subprocess-Modul kann ich gerade nicht viel anfangen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Schau Dir doch mal die Doku zum subprocess Modul an! Da gibts eine Menge Beispiele zusätzlich zu den normalen Beschreibungen. (Und hier im Forum gibts Beispiele en masse )
Wieso eigentlich muss man Excel aus dem Script starten? Imho ist das Starten von Excel doch manuell auch kein Problem. Und muss man CSV-Dateien wirklich "importieren"? Afaik kann man sie doch einfach so öffnen und muss dann ggf. in einem Dialog angeben, was Trennzeichen sind usw.
Wieso eigentlich muss man Excel aus dem Script starten? Imho ist das Starten von Excel doch manuell auch kein Problem. Und muss man CSV-Dateien wirklich "importieren"? Afaik kann man sie doch einfach so öffnen und muss dann ggf. in einem Dialog angeben, was Trennzeichen sind usw.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Der Grund für das Starten ist folgender: Ich möchte, dass der Anwender gleich sieht, ob die Messung erfolgreich war. So müsste man erst nach Beendigung des Skript Excel öffnen, die csv-Datei importieren durch z.B ein Makro und so weiter.
hallo robert
natürlich hast du recht. aber bei mir ist es so: Ich habe bereits ein Excel File erzeugt. Dieses File beinhaltet verschiedene Arbeitsmappen wo auch schon einige Formeln hinterlegt sind. Der Anwender kann jetzt verschiedene Messungen durchführen mittels einer selbst erzeugten GUI. Ich möchte einfach, dass der Anwender nur noch zum schluss das Excel file öffnet und auf die entsprechende Arbeitsmappe geht und gleich sieht, ob die Messung erfolgreich war. Deswegen benötige ich quasi ein Code, der mir zum Schluss die bereits erzeugte csv Datei automatisch in dieses Excelfile importiert.
natürlich hast du recht. aber bei mir ist es so: Ich habe bereits ein Excel File erzeugt. Dieses File beinhaltet verschiedene Arbeitsmappen wo auch schon einige Formeln hinterlegt sind. Der Anwender kann jetzt verschiedene Messungen durchführen mittels einer selbst erzeugten GUI. Ich möchte einfach, dass der Anwender nur noch zum schluss das Excel file öffnet und auf die entsprechende Arbeitsmappe geht und gleich sieht, ob die Messung erfolgreich war. Deswegen benötige ich quasi ein Code, der mir zum Schluss die bereits erzeugte csv Datei automatisch in dieses Excelfile importiert.
Hm, ich versteh dein Problem irgendwie immer noch nicht. Wenn ich dich richtig verstehe, klappt das mit dem Schreiben in Excel schon, nur dauert dir das zu lange, so dass du erst die Daten in eine csv-Datei schreiben willst, und diese dann am Ende importierst?
Also, ich habe gerade kein Excel zur Hand, aber ich vermute dass das importieren in Excel immer in etwa die gleiche Zeit dauert, egal ob du das am Ende oder am Anfang machst. Und wenn du schon weißt wie das geht, kannst du die Daten ja einfach am Ende der Messungen in Excel schreiben. 5000 Werte sollte man auch im Speicher halten können.
Oder du schreibst von deinem Python-Programm wirklich nur in die CSV, und guckst mal ab du in Excel eine Tabelle nicht irgendwie mit der csv Verknüpfen kannst. Stichwort externe Datenquelle. Das ist dann aber kein Python-Problem mehr...
Also, ich habe gerade kein Excel zur Hand, aber ich vermute dass das importieren in Excel immer in etwa die gleiche Zeit dauert, egal ob du das am Ende oder am Anfang machst. Und wenn du schon weißt wie das geht, kannst du die Daten ja einfach am Ende der Messungen in Excel schreiben. 5000 Werte sollte man auch im Speicher halten können.
Oder du schreibst von deinem Python-Programm wirklich nur in die CSV, und guckst mal ab du in Excel eine Tabelle nicht irgendwie mit der csv Verknüpfen kannst. Stichwort externe Datenquelle. Das ist dann aber kein Python-Problem mehr...
kann ich damit auch ein z.B. 5000x2 Array direkt in Excel schreiben. Über win32 mache ich das nämlich Zeile für Zeile mit der Funktion:
for j, content in enumerate([m, float(fListTraceData[m]), float(fFrequency)]):
xlApp.ActiveWorkbook.Sheets("SpuriousChain2RS").Cells(n, j+1).Value = content
nur bei 5000 Messwerten benötige ich dazu über 8 Minuten. Das soll aber viel schneller gehen. Deswegen meine Idee mit einem Array oder 2. Möglichkeit: eine csv-Datei erzeugen mit den Werten (geht sehr schnell) Inhalt kopieren und in das gewünschte Excelfile einfügen. Was meint ihr dazu ?
for j, content in enumerate([m, float(fListTraceData[m]), float(fFrequency)]):
xlApp.ActiveWorkbook.Sheets("SpuriousChain2RS").Cells(n, j+1).Value = content
nur bei 5000 Messwerten benötige ich dazu über 8 Minuten. Das soll aber viel schneller gehen. Deswegen meine Idee mit einem Array oder 2. Möglichkeit: eine csv-Datei erzeugen mit den Werten (geht sehr schnell) Inhalt kopieren und in das gewünschte Excelfile einfügen. Was meint ihr dazu ?
Also mit dem Beispiel von:
https://secure.simplistix.co.uk/svn/xlw ... /simple.py
leicht abgeändert ist mein Excel-File, quasi sofort geschrieben.
Das Modul hat mkesper ja schon zwei Posts drüber erwähnt.
Dann brauchst den Umweg über csv nicht gehen. Oder gibts da ein Problem ?
Gruß
https://secure.simplistix.co.uk/svn/xlw ... /simple.py
leicht abgeändert ist mein Excel-File, quasi sofort geschrieben.
Code: Alles auswählen
import xlwt
font0 = xlwt.Font()
font0.name = 'Times New Roman'
font0.colour_index = 2
font0.bold = True
style0 = xlwt.XFStyle()
style0.font = font0
wb = xlwt.Workbook()
ws = wb.add_sheet('A Test Sheet')
for i in xrange(5000):
ws.write(i, 0, 'Test' + str(i), style0)
wb.save('example.xls')
Dann brauchst den Umweg über csv nicht gehen. Oder gibts da ein Problem ?
Gruß
mit dem Suchstring bei Google:
excel python import csv
kam das heraus:
http://sujitpal.blogspot.com/2007/02/py ... es-to.html
Da scheint einer ein ähnliches Problem zuhaben.
Könnte als Hilfe dienen ...
Gruß
excel python import csv
kam das heraus:
http://sujitpal.blogspot.com/2007/02/py ... es-to.html
Da scheint einer ein ähnliches Problem zuhaben.
Könnte als Hilfe dienen ...
Gruß
ich sehe gerade meine vorletzte Antwort wurde überhaupt net gepostet.
Dann halt nochmal:
mit dem Code von dir (ichisich) schreibst du ja auch die Messwerte Zeile für Zeile in Excel. Das habe ich mit diesem Code auch schon gemacht:
habe mit folgenden Modulen gearbeitet:
import win32com
import win32com.client
from win32com.client import Dispatch
geht das bei dir schneller? Ich benötige über 8 Minuten um 5000x2 Messwerte in Excel zu schreiben. Das ist eindeutig zu lang.
Wenn ja müsstest du mir den Code mal näher erklären:
1. hier sage ich wo ich im Excel File meine Daten haben möchte z.B. in Tabelle2 oder ?
2. wie sieht die for schleife aus bei 5000x2 aus ? Ich habe eine Liste in der ich bei jedem Durchgang den 1. und 2., im nächsten Durchgang den 3. und 4. usw aus der Liste raushole und in Excel schreibe
3. ws.write(i, 0, 'Test' + str(i), style0) ich kann mit den Werten in der Klammer wenig anfangen ? kannst du mir das kurz schildern
oh man ich bin gerade voll überfordert damit. ist wohl die Hitze
Dann halt nochmal:
mit dem Code von dir (ichisich) schreibst du ja auch die Messwerte Zeile für Zeile in Excel. Das habe ich mit diesem Code auch schon gemacht:
Code: Alles auswählen
while(m<len(fListTraceData))
for j, content in enumerate([m, float(fListTraceData[m]), float(fFrequency)]):
xlApp.ActiveWorkbook.Sheets("SpuriousChain2RS").Cells(n, j+1).Value = content
m += 1
import win32com
import win32com.client
from win32com.client import Dispatch
geht das bei dir schneller? Ich benötige über 8 Minuten um 5000x2 Messwerte in Excel zu schreiben. Das ist eindeutig zu lang.
Wenn ja müsstest du mir den Code mal näher erklären:
1. hier sage ich wo ich im Excel File meine Daten haben möchte z.B. in Tabelle2 oder ?
2. wie sieht die for schleife aus bei 5000x2 aus ? Ich habe eine Liste in der ich bei jedem Durchgang den 1. und 2., im nächsten Durchgang den 3. und 4. usw aus der Liste raushole und in Excel schreibe
3. ws.write(i, 0, 'Test' + str(i), style0) ich kann mit den Werten in der Klammer wenig anfangen ? kannst du mir das kurz schildern
oh man ich bin gerade voll überfordert damit. ist wohl die Hitze
Schau einfach mal bei
python-excel
Da ist alles am Start ...
Noch zu dem mini Bsp.
Das ganze Stylezeugs kannst erstmal veregessen da gehts nur um Style -> Schrift, Farbe etc .....
In diesem Bsp. wird das Excelfile aber immer neu erstellt. Also vorhandene Daten werden einfach überschrieben.
Wenn Du ein File verändern willst must Du dich bisschen durch die Doku kämpfen die beschreibt sicher wie man ein File öffnet und nur Teile (in deinem Fall die Messdaten) in Spalte X und Zeile Y überschreibt, den Rest aber unberührt lässt.
Gruß
python-excel
Da ist alles am Start ...
Noch zu dem mini Bsp.
Das ganze Stylezeugs kannst erstmal veregessen da gehts nur um Style -> Schrift, Farbe etc .....
Code: Alles auswählen
# ein Excel-Workbook-Objekt
wb = xlwt.Workbook()
# dem ein sheet mit dem Namen "A Test Sheet" hunzugefügt wird
ws = wb.add_sheet('A Test Sheet')
for i in xrange(5000):
#dem Sheet wird in Zeile 'i' und Spalte '0==null' der Wert 'Test[zeilennummer]'
#hinzugefügt
ws.write(i, 0, 'Test' + str(i), style0)
# style0 kannst Du auch weglassen dann wird einfach der Defaultstyle genommen
# Schreib das Excel-Workbook-Objekt in ein File mit dem Namen 'example.xls'
wb.save('example.xls')
Wenn Du ein File verändern willst must Du dich bisschen durch die Doku kämpfen die beschreibt sicher wie man ein File öffnet und nur Teile (in deinem Fall die Messdaten) in Spalte X und Zeile Y überschreibt, den Rest aber unberührt lässt.
Gruß
Code: Alles auswählen
ws.write(0, 0, 'Zeile 0, Spalte A')
ws.write(0, 1, 'Zeile 0, Spalte B')
ws.write(1, 0, 'Zeile 1, Spalte A')
ws.write(1, 1, 'Zeile 1, Spalte B')
'test.py' pasten und ausführen kann.
Dann das Ergebnis in Excel anschauen und sich überlegen warum ...
sorry, ich könnte mir gerade selber in den A.... beißen. Es ist eindeutig zu warm.
Jetzt muss ich nur noch rausbekommen wie ich in ein bereits voprhandenes Excel File das reinschreiben kann.
Ich bin dir so dankbar. Schön das es solche Leute gibt. Danke
Jetzt muss ich nur noch rausbekommen wie ich in ein bereits voprhandenes Excel File das reinschreiben kann.
Ich bin dir so dankbar. Schön das es solche Leute gibt. Danke