Seite 1 von 2
CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 19:27
von lodder
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
Re: CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 19:44
von noisefloor
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
Re: CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 20:46
von lodder
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.
Re: CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 20:52
von Hyperion
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.
Re: CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 20:59
von lodder
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.
Re: CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 21:05
von .robert
Also, Excel kann csv-Dateien ganz normal wie auch die xls(x) öffnen, ohne das die irgendwie durch ein Makro importiert werden müssten.
(Oder verstehe ich gerade das Problem nicht?)
Re: CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 21:13
von lodder
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.
Re: CSV Datei in Excel inportieren
Verfasst: Mittwoch 30. Juni 2010, 21:37
von .robert
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...
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 12:22
von mkesper
Erzeuge direkt eine Exceldatei, indem du nicht über win32 gehst, sondern das Modul
xlwt benützt.
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 13:01
von lodder
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 ?
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 13:34
von lodder
Ich komme einfach nicht weiter. Ich verstehe nicht, wie ich eine CSV Datei nach Excel importiern kann. Ich bin gerade völlig ratlos. Kann mir da keiner auf die Sprünge helfen ?
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 14:03
von ichisich
Also mit dem Beispiel von:
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')
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ß
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 14:12
von ichisich
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ß
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 14:30
von lodder
mit dem link bin ich komplett überfordert.
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 14:41
von ichisich
hmm ...
Und mit dem anderen Modul ?
Warum willst Du noch immer über CSV gehen ?
Gibts dafür nen Grund ?
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 15:08
von lodder
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:
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
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

Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 15:21
von ichisich
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 .....
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')
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ß
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 15:30
von lodder
ok aber so schreibe ich momentan nur jeweils ein Wert in die Zeile und dann kommt die nächste Zeile, was aber wenn ich 2 Werte habe: Spalte A und Spalte B
wie muss ich das abändern
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 15:39
von ichisich
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')
In dem Link sind aber echt viel Beispiele die man Kopieren, in ein File
'test.py' pasten und ausführen kann.
Dann das Ergebnis in Excel anschauen und sich überlegen warum ...
Re: CSV Datei in Excel inportieren
Verfasst: Donnerstag 1. Juli 2010, 15:43
von lodder
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